2015-11-05 37 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合作已經很長時間了,所以我不覺得我可以幫助 –