2015-11-05 41 views
0

所以我有ID,雇员,日期等形式的简单数据库表,创建一个正常模式:MVC5问题的DropDownList和视图模型

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> 

的问题时试图将dropdownlilst结合时,它会正确填充但在控制器中看不到变化。

<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> 

的起始日期在控制器更新。

MUCHO挠头之后,我终于得到这个周围使用:

@Html.Hidden("selectedEmployee") 

而且在JQuery的更新此。我确实尝试使用@ html.DropDownListFor,但目前为止没有喜悦。 任何人都可以看到什么是错的,我把我所有的头发拉出来。

回答

2

您的模型不包含名为EmployeeID的属性。但它确实有名为WorkItemMonday.EmployeeIDWorkItemTuesday.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"属性,这样当您发布他们会结合你的模型。

+0

Stephen,我尊重你的意见和专业知识,当/如果你有时间你会介意给我这方面的反馈:http://stackoverflow.com/a/33546482/3956566谢谢 –

+0

非常完美,非常感谢。 – AndyKenZ

+0

@Yvette,自从我与ListView/WPF合作已经很长时间了,所以我不觉得我可以帮助 –