DropDownList的asp.net帮助器无法正确呈现

时间:2011-08-01 21:43:43

标签: asp.net-mvc-3

我正在尝试获取下拉列表,以便在页面加载时选择正确的值。

@Html.DropDownList("CounterpartyTypeSelect", new SelectList(ViewBag.CounterpartyTypeOptions, "DefaultId", "Value"), new { @class = "selectbox", selected = Model.CounterpartyType }) 

但是,当页面呈现时,它总是选择下拉列表中的第一个值。

Screenshot of the page

页面的html源代码:

    <select class="selectbox" id="CounterpartyTypeSelect" name="CounterpartyTypeSelect" selected="977980f2-ebb2-4c2a-92c2-4ecdc89b248d">
        <option value="5802239e-c601-4f1e-9067-26321213f6e6">Societa per Azioni (SpA)</option>
        <option value="f8160341-4a69-436f-9882-4da31a78f1d5">Gesellschaft mit beshrankter Haftung (GmbH)</option>
        <option value="977980f2-ebb2-4c2a-92c2-4ecdc89b248d">Sociedad Anonima (SA)</option>
        <option value="cdbeb1d3-301b-4884-b65a-612ddd8306f3">Private Limited Company (Ltd)</option>
        <option value="1fe68d96-f31b-4859-9869-8c76a5eb1508">Corporation (Inc)</option>
        <option value="9c9e5722-ab59-4d1c-a0a3-91b42a3ee721">Limitada (LTDA)</option>
        <option value="0cb57339-8705-4e3a-8f6a-95e9664962b7">Public Limited Company (Plc)</option>
        <option value="0924d6f1-06a9-49a3-ac05-b3e2686a0e92">Partnership</option>
        <option value="c8fbe021-a8f7-4e9d-ab38-dbeb5af5a631">Limited Liability Company (LLC)</option>
        <option value="30d9e22b-34f5-43c5-8471-e614dbedb6a6">Aktiengesellschaft(AG)</option>
    </select> 

正如您所看到的那样,它将“selected”属性放入外部选择标记而不是匹配Id的选项。我有另一个具有相同参数的选择(当然,变量名除外)并且它以这种方式正确呈现。我不想使用DropDownListFor<T>,因为我有一个HiddenFor字段实际上在表单中提交此值,javascript设置值以匹配Select选项。我已经确认我的数据库正在存储我正确设置的值。到底是怎么回事?

2 个答案:

答案 0 :(得分:2)

SelectList()超载,您可以选择所选项目。您将其作为HTML属性添加到帮助程序中,并将其呈现给父选择标记。

这样做:

@Html.DropDownList("CounterpartyTypeSelect", new SelectList(ViewBag.CounterpartyTypeOptions, "DefaultId", "Value", Model.CounterpartyType), new { @class = "selectbox" })

对SelectList使用带有四个参数的重载:

new SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue);

答案 1 :(得分:0)

代码的第一行new { @class = "selectbox", selected = Model.CounterpartyType }中发生的情况是您将所选属性作为父 select 元素的HTML属性提供。

所以你看到 selected =“977980f2-ebb2-4c2a-92c2-4ecdc89b248d ”出现在你的第一行输出中,btw没有做任何事情。

此外,您将在Helper中搜索的值作为硬编码字符串“value”而不是模型中所需的实际值。浏览器将默认为第一个选项,因为它找不到与“value”匹配的任何值。 要解决此问题,请将Model.CounterpartyType作为 SelectList 参数的第三个参数,而不是“value”。