2011-12-22 71 views
1

其他類似的問題,我昨天詢問here稍作修改。另一個模型綁定問題

這裏是我的模型

public class InfoModel  
{ 
    public NameModel Name { get; set; } 
    public string Phone { get; set; } 
} 

public class NameModel 
{ 
    public string Title  { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public List<SelectListItem> Titles 
    { 
     get 
     { 
      var list = new List<SelectListItem>(); 
      list.Add(new SelectListItem() { Text = "Mr.", Value = "Mr." }); 
      list.Add(new SelectListItem() { Text = "Mrs.", Value = "Mrs." }); 
      list.Add(new SelectListItem() { Text = "Ms.", Value = "Ms." }); 

      return list; 
     } 
    } 

    public NameModel() 
    { 

    } 

    public NameModel(string first, string last) 
    { 
     this.FirstName = first; 
     this.LastName = last; 
    } 
} 

然後我有第一視圖ShowName.cshtml如下

@model MyTestApp.Models.NameModel 

@Html.DropDownListFor(m => m.Title, Model.Titles, Model.Titles) 
<br /> 
@Html.LabelFor(m => m.LastName) 
@Html.TextBoxFor(m => m.LastName)  
<br /> 
@Html.LabelFor(m => m.FirstName) 
@Html.TextBoxFor(m => m.FirstName)  

上述視圖中ShowInfo.cshtml用作下面

@model MyTestApp.Models.InfoModel 

@using (Html.BeginForm()) 
{ 
    @Html.Partial("ShowName", Model.Name) 
    <br /> 
    @Html.LabelFor(m => m.Phone) 
    @Html.TextBoxFor(m => m.Phone) 
    <br /> 
    <input type="submit" value="Submit Info" /> 
} 

當用戶提交任何信息時,下面的控制器方法稱爲

[HttpPost] 
public ActionResult ShowInfo(InfoModel model) 
{ 
    ... 
} 

問題是手機很好,但名稱爲空。如果我將@Html.Partial("ShowName", Model.Name)更改爲@Html.EditorFor(m => m.Name, "ShowName") ,則標題的下拉菜單顯示爲編輯框

回答

2

我建議您使用編輯器模板。因此,而不是Html.Partial使用:

@Html.EditorFor(x => x.Name, "ShowName") 

然後將偏~/Views/Shared/EditorTemplates/ShowName.cshtml

下面是部分不起作用的原因:它爲輸入字段生成錯誤的名稱。所以,當你寫:

@Html.TextBoxFor(m => m.LastName) 

這會產生以下標記:

<input type="text" name="LastName" id="LastName" value="" /> 

,而你需要:

<input type="text" name="Name.LastName" id="Name_LastName" value="" /> 

默認模型綁定正常工作和分配的姓氏屬性主視圖模型上的名稱屬性。

當您使用編輯器模板時(如我的示例所示),它們會自動處理關聯路徑併爲輸入元素生成專有名稱。

+0

正如我的問題所述,使用編輯器模板的問題是它不顯示List 標題作爲下拉列表。我想怎麼做呢? – 2011-12-22 14:56:34

+0

@palmsnow,它爲什麼不能正確顯示?它顯示的是什麼?你似乎也在使用一些錯誤的過載。你應該使用'@ Html.DropDownListFor(m => m.Title,Model.Titles)'。這應該很好。 – 2011-12-22 15:00:03

+0

我也嘗試過其他重載。該下拉菜單顯示爲編輯框。可能是因爲它的集合或什麼? – 2011-12-22 15:03:05