您好,
几天前我得到了这个问题的帮助:
Strange problem with ASP.NET MVC DropDownFor
我得到了解决方案,但现在我遇到了同样的观点和行动的类似问题。
这次我在部分视图中获得了以下内容:
<%: Html.DropDownListFor(model => model.ST1, Model.ShowAdTypeList1, new { @class = "dd2", @style = "width:80px;" })%>
这将呈现如下:
<select name="ALS.ST1" id="ALS_ST1">
<option value="0">Alla</option>
<option value="1">Privata</option>
<option value="2">Företag</option>
</select>
我在行动结束时有以下代码
data.ALS.ST1 = 2;
ModelState.Clear();
return View(data);
问题是下拉列表总是选择0?在下拉列表中手动选择值2时,输入操作时data.ALS.ST1将设置为2.
为什么不将下拉列表设置为值2?
编辑1:
这是唯一可以在整个页面上使用ALS_ST1的JavaScript:
$('#ALS_ST1').change(function () {
if (IsNotDblClick(this.id)) {
document.forms['list_ad'].submit();
}
else
return false;
});
EDIT2
Model.ShowAdTypeList1是SelectList类型的一个,没有选择。 DropDownFore用于将ST1值设置为选中。
EDIT3
请注意,此部分视图实际上是一个模板:http://weblogs.asp.net/rashid/archive/2009/11/27/extending-asp-net-mvc-2-templates.aspx。
答案 0 :(得分:1)
尝试像下面那样呈现下拉列表:
<%= Html.DropDownListFor(
x => x.ST1,
new SelectList(Model.ShowAdTypeList1, "Value", "Text", Model.ST1),
new { @class = "dd2", @style = "width:80px;" }
) %>
这假定ShowAdTypeList1
属性是IEnumerable<SelectListItem>
。如果不是,您可能需要调整Value
和Text
参数。
此外,我建议您不要清除整个模型状态,而是只重置您在POST操作中修改的属性:
ModelState.Remove("ALS.ST1");
data.ALS.ST1 = 2;
return View(data);