![](/img/trans.png)
[英]How Do I Model Bind A List Of 'List<SelectItem>' Using MVC.Net
[英]How to bind a model in mvc.net where the model contains a list of dropdowns?
如果我有一個具有以下結構的ViewModel:
public class FormViewModel
{
public string Name { get; set; }
public List<OptionGroup> Options { get; set; }
public string Comments { get; set; }
}
public class OptionGroup
{
public string OptionType;
public IEnumerable<SelectListItem> Options { get; set; }
public string SelectedOption;
}
我想發布到具有如下簽名的Controller方法:
[HttpPost]
public ActionResult PostForm(FormViewModel model)
{
// do stuff
}
如何在剃須刀中綁定SelectList,以便在將其發送回服務器時正確綁定所選值?
我的第一個直覺是嘗試:
foreach (OptionGroup optionGroup in Model.Options)
{
<div class="form-group">
<label>@optionGroup.OptionType</label>
@Html.DropDownListFor(m => optionGroup.SelectedOption, optionGroup.Options, optionGroup.OptionType, new { @class = "form-control" })
</div>
}
但這導致根本沒有任何選項返回到服務器。
然后,我找到了Scott Hanselman的這篇文章:
並嘗試使用for循環:
for (int i = 0; i < Model.Options.Count; i++)
{
<div class="form-group">
<label>@Model.Options[i].OptionType</label>
@Html.DropDownListFor(m => m.Options[i].SelectedOption, Model.Options[i].Options, Model.Options[i].OptionType, new { @class = "form-control", name = string.Format("model.Options[{0}].SelectedOption", i) })
</div>
}
這將綁定選項列表,但無法填充所選值。 (即,我在服務器上獲得了一個選項列表,但是選項的所有屬性均為Null)
我能找到的所有示例都使用一個簡單的可枚舉作為整個視圖模型-當下拉列表只是完整ViewModel的一部分時,如何綁定到下拉列表?
任何指針都很棒,
干杯!
編輯
相關: 我如何使用也發送鍵值的MVC.Net對“ List <SelectItem>”的列表進行綁定建模
並考慮到Stephen Muecke的回答,我嘗試過:
for (int i = 0; i < Model.Options.Count; i++)
{
<div class="form-group">
<label>@Model.Options[i].OptionType</label>
@Html.HiddenFor(m => Model.Options[i].OptionType)
@Html.DropDownListFor(m => m.Options[i].SelectedOption, Model.Options[i].Options, Model.Options[i].OptionType, new { @class = "form-control" })
</div>
}
但仍然沒有運氣:(
從方法中刪除以下內容
.. name = string.Format("model.Options[{0}].SelectedOption", i) ..
@Html.DropDownList()
方法將為您正確命名選擇,即
<select name="Options[0].SelectedOption" ...>
<select name="Options[1].SelectedOption" ...>
// etc
但您是“模特”。 以便名稱在回發時不匹配
您的OptionGroup
屬性也缺少訪問器
public class OptionGroup
{
public string OptionType { get; set; } // add get/set
public IEnumerable<SelectListItem> Options { get; set; }
public string SelectedOption { get; set; } // add get/set
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.