c# - 错误 CS1503 参数 1:无法从“KurseviApp.Kurs”转换为“KurseviApp.Student”
问题描述
我是 ASP.NET MVC 的新手,我正在尝试制作具有多对多关系(课程/学生)的简单应用程序。在我的语言中是(kurs/student)。
这是我的课程
namespace KurseviApp
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
public partial class Kurs
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Kurs()
{
this.Student = new HashSet<Student>();
}
public int PK_Kurs_ID { get; set; }
public string Naziv_Kursa { get; set; }
[NotMapped]
public string Izabrani { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Student> Student { get; set; }
}
}
这是我的学生课
namespace KurseviApp
{
using System;
using System.Collections.Generic;
public partial class Student
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Student()
{
this.Kurs = new HashSet<Kurs>();
}
public int PK_Student_ID { get; set; }
public string Broj_Indeksa { get; set; }
public string Ime { get; set; }
public string Prezime { get; set; }
public string Godina { get; set; }
public string Status { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Kurs> Kurs { get; set; }
}
}
到目前为止,我做得很好。但是当我创建新课程并为其选择学生时,问题就出现了。这是我在控制器中的代码
private kurseviEntities db = new kurseviEntities();
public ActionResult Add(int id = 0)
{
Kurs ks = new Kurs();
using (db)
{
ks.Student = db.Student.ToList();
}
return View(ks);
}
[HttpPost]
public ActionResult Add(Kurs kurs)
{
using (db)
{
db.Student.Add(kurs); //THIS LINE IS A PROBLEM
db.SaveChanges();
}
return RedirectToAction("index");
}
它给了我在文章标题中写的错误。如果我删除该行,则课程创建成功,但我仍然缺少将学生添加到课程中。欢迎任何帮助,在此先感谢。
编辑:这是我的看法
@model KurseviApp.Kurs
@{
ViewBag.Title = "Add";
}
<h2>Add</h2>
@using (Html.BeginForm())
{
<div class="form-horizontal">
@Html.HiddenFor(model => model.PK_Kurs_ID)
@Html.LabelFor(model => model.Naziv_Kursa, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Naziv_Kursa, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Naziv_Kursa, "", new { @class = "text-danger" })
</div>
<label>Odabir studenata</label>
@Html.DropDownListFor(model => model.Izabrani,
new SelectList(Model.Student, "PK_Student_ID", "Ime"),
new { @class="choosen-select", id = "normalDropDown" })
<input type="submit" name="name" value="submit" />
</div>
}
@section scripts {
<script>
$(function () {
$("#normalDropDown").chosen({ width: "15%" });
});
</script>
}
解决方案
Kurs
并且Students
是不同类型的事物;db.Students
是一个列表,Students
您正在尝试直接将新添加Kurs
到该列表中。我的猜测是你想得到一个特定的学生,然后调用student.Kurs.Add(kurs)
将其添加Kurs
到特定学生的 kurs 列表中。
推荐阅读
- java - 使用 gcloud 命令时复制失败的错误 dockerfile
- ios - iOS - 签名缺失或无效
- image-processing - 如何找到图像图的 peek 值?(绘图数字化仪)
- java - ConnectionPoolTimeoutException: 等待来自池 putObject () s3Client Java 的连接超时
- typescript - 代码问题解决方案在 TS 操场上有效,但在第三方编码挑战网站上失败
- azure - 存储帐户 - 导出 blob 大小和日期
- python - 命令引发异常:IndexError:无法从空序列 DISCORD.PY 中选择
- windows-10 - 如何删除作为驱动器的目录?
- javascript - Redux combineReducer 和 createStore,如何传递初始状态
- .net-core - 使用带有接口的 OpenApi 客户端 .NET Core