0

我有一个视图模型属性来保存下拉选择值列表,例如:

  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 代码中做错了什么?...帮助!

4

1 回答 1

0

问题在于 HTML 帮助程序以及我如何发回。以下是我解决它的方法(感谢我的 CTO!):

创建了我的视图模型属性,该属性将作为填充资源:

Dictionary<int, List<SelectListItem>> CCSetting_ClaimDropdownTypeCollection

使用相同的键创建另一个字典,其值将是用户选择:

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>
                    }

很抱歉没有以更好的方式表达我的问题,我可能是在几个小时的沮丧之后发布的,最终在措辞方面做得不好。为这个问题获得“风滚草”徽章促使我回来发布解决方案。好的关闭,希望有一天有人遇到这个!

于 2013-01-30T14:19:57.853 回答