2013-03-12 116 views
1

我有一個partialView _BasicInfoPartView關聯到BasicInfoModel。 這partialview包含一些輸入和下拉列表如下:窗體mvc3剃刀partialview後

public class BasicInfoModel 
{  public string Name { get; set; } 
     public string selectedRubric { get; set; } 
     public IEnumerable<SelectListItem> Rubrics { get; set; } 
} 

部分_BasicInfoPartView.cshtml

@model ProjectZeroWebSite.Models.PleGroupModel 
@Html.ListBoxFor(m => m.selectedRubric, @Model.Rubrics }) 
@Html.TextBoxFor(m => m.Name) 

這partialview可以在任何頁面的形式調用。只需要在頁面模型中添加BasicInfoModel。

public class RandomPageModel 
{ 
     public basicInfoModel { get; set; } 
     public string info2{ get; set; } 
     ... 
     public RandomPageModel() 
     { this.basicInfoModel = new basicInfoModel();} 
} 

RandomPage.cshtml

@using (Html.BeginForm()) 
{ 
    @Html.Partial("_BasicInfoPartView ", @Model.BasicInfoModel) 
    @Html.TextBoxFor(m => m.info2) 
    ... 
    <input type="submit" /> 
} 

現在的問題: 我可以填充頁面沒有問題。 但是當我嘗試從模型中檢索控制器中的信息時: RandomPageModel.info2 OK! RandomPageModel.BasicInfoModel是空的...

我覺得我會錯過了解數據綁定的概念:■ 我試試這個,因爲我不想被小JS函數重載我的網頁和不喜歡的想法牛逼複製過去我的形式(代碼維護)。

提前致謝。

Cantinos。

回答

4

在這種情況下,您需要使用編輯器模板而不是局部視圖。

所以你定義一個editorTemplate(強類型)

@model BasicInfoModel 

@Html.ListBoxFor(m => m.selectedRubric, @Model.Rubrics }) 
@Html.TextBoxFor(m => m.Name) 

名稱這個編輯器模板一樣的模型,並把它放在一個文件夾中名爲EditorTemplates在共享視圖文件夾

〜/ Views/Shared/EditorTemplates/BasicInfoModel.cshtml

然後換出這條線

@Html.Partial("_BasicInfoPartView ", @Model.BasicInfoModel) 

這一個

@Html.EditorFor(m => m.BasicInfoModel) 
+0

您可以在編輯器模板的名稱去掉 「_」,並使用@ Html.EditorFor(M => m.BasicInfoModel) – Dima 2013-03-12 17:05:24

+0

@Dima +1編輯,以反映,謝謝 – 2013-03-12 17:07:45

+1

這是一個我仍然需要學習的技巧 – 2013-03-12 17:08:27