我有一些SelectList和DropDownList的问题。 ICH有两种型号(TimeRecord有一个导航属性项目):ASP NET MVC 5 SeletList DropDownList
public class Project
{
public int ProjectId { get; set; }
[Required]
public string ProjectName { get; set; }
}
和
public class TimeRecord
{
public int TimeRecordId { get; set; }
public int ProjectId { get; set; }
public string Description { get; set; }
public Project TmRecProject { get; set; }
}
在我创建行动方法控制选择列表的是路过ViewBag到视图(到现在都是正确的工作)
public ActionResult Create()
{
ViewBag.ProjectId = new SelectList(db.Projects, "ProjectId", "ProjectName");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(TimeRecord timeRecord)
{
if (ModelState.IsValid)
{
db.TimeRecords.Add(timeRecord);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(timeRecord);
}
这里查看:
@model SelectListDropDownTest.Models.TimeRecord
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>TimeRecord</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.TmRecProject.ProjectId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("ProjectId", null, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
在创建视图中,我可以从DropDownList中选择一个项目。我的问题是,当我将模型“TimeRecord”传递回控制器时,项目“TmRecProject”始终为空。
解决此问题的最佳方法是什么?
您需要绑定“ProjectId”(而不是'TmRecProject'),这是您的代码正在执行的操作(虽然很糟糕) - 它将保存数据时更新的“ProjectId”的值。你的实现意味着你不会得到客户端验证,并且'SelectList'的名字需要和你绑定的属性不同,以便在视图中它的'@ Html.DropDownListFor(m => m.ProjectId,(SelectList )ViewBag.ProjectList,new {@class =“form-control”})'无论如何,您的编辑数据总是使用视图模型 –