我正在尝试获取下拉列表,以便在页面加载时选择正确的值。
@Html.DropDownList("CounterpartyTypeSelect", new SelectList(ViewBag.CounterpartyTypeOptions, "DefaultId", "Value"), new { @class = "selectbox", selected = Model.CounterpartyType })
但是,当页面呈现时,它总是选择下拉列表中的第一个值。
页面的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选项。我已经确认我的数据库正在存储我正确设置的值。到底是怎么回事?
答案 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”。