我有一个视图模型属性来保存下拉列表选择值列表,如:
private ListDictionary _claimDropdownValueCollection = new ListDictionary();
public ListDictionary ClaimDropdownValueCollection { get { return _claimDropdownValueCollection; } set { _claimDropdownValueCollection = value; } }
在执行GET时,我在我的视图模型中循环遍历不同的ListDictionary,其中包含“下拉类型”名称:
@foreach (System.Collections.DictionaryEntry de in Model.CCSetting_ClaimDropdownTypeCollection) {
<div class="formRow">
<label>@EverythingToDoWith_CCSetting_ClaimDropdownTypes.getDropdownTypeName(Model.ccClaim.clientID, Convert.ToInt32(de.Key))</label>
<div class="formRight searchDrop">
@Html.DropDownListFor(m => m.ClaimDropdownValueCollection[@de.Key], (IEnumerable<SelectListItem>) @de.Value, new { @class = "chzn-select", @data_placeholder="Choose an option...", @style="width: 350px;" })
</div>
<div class="clear"></div>
</div>
}
所以基本上,这会加载一堆下拉菜单,它们的'标签'按字典中的键打印。每个下拉列表的'值'是从每个字典的VALUE中获得的,每个字典包含一个IENUMERABLE。
到目前为止一切顺利。现在,用户在每个下拉列表中进行选择,然后进行HTTP POST。在浏览器开发人员工具中,我看到发回的以下数据:
ClaimDropdownValueCollection[1]:2
ClaimDropdownValueCollection[2]:5
ClaimDropdownValueCollection[3]:
ClaimDropdownValueCollection[4]:11
所以这是4个下拉键,1,2,3,4键(我的键会更复杂,这里的简单键是为了我的例子),其中三个有选择,所以我传回选定的ID 2,5和11。
但问题是,当我在接收发布数据的[HttpPost]控制器方法内部进行调试时,我无法将此数据视为视图模型listdictionary对象的一部分。这表示“ClaimDropdownValueCollection”属性为空。
我希望能说出类似的话:
foreach (DictionaryEntry de in vm.ClaimDropdownValueCollection) {
//do something here with de.Key and de.Value
}
那么我在RAZOR代码中做错了什么?......帮助!
答案 0 :(得分:0)
问题在于HTML帮助程序以及我如何回发。以下是我解决问题的方法(感谢我的CTO工作!):</ p>
创建了我的视图模型属性,该属性将作为从以下位置填充的资源:
Dictionary<int, List<SelectListItem>> CCSetting_ClaimDropdownTypeCollection
使用SAME KEYS创建另一个字典,其VALUE将是用户选择:
Dictionary<int, int> ClaimDropdownValueCollection
现在在RAZOR方面,我正在做这样的事情(注意使用HTML.Hidden和HTML.Dropdown而不是HTML.DropdownFor):
@foreach (var de in Model.CCSetting_ClaimDropdownTypeCollection) {
<div class="formRow">
<div class="formRight searchDrop">
@Html.Hidden("ClaimDropdownValueCollection[" + @de.Key + "]", @de.Key)
@Html.DropDownList("ClaimDropdownValueCollection[" + @de.Value + "]", @de.Value, new { @class = "chzn-select", @data_placeholder="Choose an option...", @style="width: 350px;" })
</div>
<div class="clear"></div>
</div>
}
很抱歉没有以更好的方式写下我的问题,我可能会在经过几个小时的挫折之后发布,并最终做了一个糟糕的工作。获得这个问题的“Tumbleweed”徽章促使我回来并发布解决方案。好的关闭,希望有一天会遇到这个!