所以我有一个简单的数据库表,其形式为ID,EmployeeID,date等。这会创建一个普通的模型:
public partial class WorkItem
{
public int ID { get; set; }
public int EmployeeID { get; set; }
public int LocationID { get; set; }
[DataType( DataType.Date )]
[Display( Name = "Start date" )]
public System.DateTime StartDate { get; set; }
当我需要增加此模型的功能时出现问题,因此我创建了一个视图模型,以便每周对工作项进行分组。
public class WeeklyWorkItemsViewModel
{
public WorkItem WorkItemMonday { get; set; }
public WorkItem WorkItemTuesday { get; set; }
一切都非常适合我视图中的DateTime字段(绑定到视图模型):
<div class="form-group">
@Html.LabelFor( model => model.WorkItemMonday.StartDate, "Week start date", htmlAttributes: new { @class = "control-label col-md-2" } )
<div class="col-md-10">
@Html.EditorFor( model => model.WorkItemMonday.StartDate, new { htmlAttributes = new { @class = "form-control" } } )
@Html.ValidationMessageFor( model => model.WorkItemMonday.StartDate, "", new { @class = "text-danger" } )
</div>
</div>
尝试绑定dropdown时出现问题,它会正确填充,但控制器中看不到更改。
<div class="form-group">
@Html.LabelFor( model => model.WorkItemMonday.EmployeeID, "EmployeeID", htmlAttributes: new { @class = "control-label col-md-2" } )
<div class="col-md-10">
@Html.Hidden( "selectedEmployee" )
@Html.DropDownList( "EmployeeID", null, htmlAttributes: new { @class = "form-control" } )
@Html.ValidationMessageFor( model => model.WorkItemMonday.EmployeeID, "", new { @class = "text-danger" } )
</div>
</div>
控制器中的StartDate 更新。
经过多次刮擦后,我终于不得不使用:
来解决这个问题@Html.Hidden( "selectedEmployee" )
在JQuery中更新它。我确实尝试使用@html.DropDownListFor但到目前为止没有任何喜悦。 在拉出我的头发之前,谁能看清楚什么是错的。
答案 0 :(得分:2)
您的模型不包含名为EmployeeID
的属性。但确实有WorkItemMonday.EmployeeID
和WorkItemTuesday.EmployeeID
。
停止使用DropDownList()
并使用强类型DropDownListFor()
方法,以便正确绑定到模型属性。
修改您的视图模型以包含SelectList
public IEnumerable<SelectListItem> EmployeeList { get; set; }
并在将模型传递给视图之前在GET方法中填充它。然后在视图中使用
@Html.DropDownListFor(m => m.WorkItemMonday.EmployeeID, Model.EmployeeList, new { @class = "form-control" })
....
@Html.DropDownListFor(m => m.WorkItemTuesday.EmployeeID, Model.EmployeeList, new { @class = "form-control" })
会生成name="WorkItemMonday.EmployeeID"
和name="WorkItemTuesday.EmployeeID"
属性,以便在发布时绑定到您的模型。