0

我想創建一個窗體,顯示一些複選框列表以及一些其他字段,其中這些列表的值和文本是在運行時確定的。如何使用在運行時生成的描述/值創建MVC4複選框列表

我遇到了一種情況,我可以獲取模型的bool屬性來更新,但其他屬性會在表單發佈後被清空。

我確定有一個簡單的解決方案,但我似乎無法找到它。

public class MainModel 
{ 
    public List<CheckboxModel> Checkboxes { get; set;} 
    public MainModel() 
    { 
    this.Checkboxes = InitializeMethod(); // populates both description and selected for a bunch of boxes. 
    } 
} 

public class CheckboxModel 
{ 
    public String Description { get; set; } // This field is null when I get the model back in the HttpPost request 
    public bool Selected { get; set; } 
} 

主要形式查看

@model MainModel 
@{ 
    for(var i = 0; i < Model.Checkboxes.Count; i++) 
    { 
    @Html.EditorFor(m => m.Checkboxes[i]); 
    } 
} 

CheckboxModel編輯觀點

@model CheckboxModel 

@Html.CheckBoxFor(m => m.Selected) 
@Html.DisplayFor(m => m.Description)<br/> 

回答

2

你不產生對Description財產,所以當你開機無值在表單數據發送表單控件。您的模板應該是,例如

@model CheckboxModel 

@Html.CheckBoxFor(m => m.Selected) 
@Html.DisplayFor(m => m.Description) 
@Html.HiddenFor(m => m.Description) 

或使用只讀文本框顯示說明

旁註:你的主視圖應該只是

@Html.EditorFor(m => m.Checkboxes) 

沒有for循環。 EditorFor()方法接受IEnumerable<T>併爲您的集合中的每個項目生成正確的html

+0

謝謝您的明確解釋! – user467384

相關問題