即使设置了视图对象,选择框也未设置?

时间:2011-08-05 20:56:45

标签: c# html asp.net-mvc html-helper

您好,

几天前我得到了这个问题的帮助:

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

1 个答案:

答案 0 :(得分:1)

尝试像下面那样呈现下拉列表:

<%= Html.DropDownListFor(
    x => x.ST1, 
    new SelectList(Model.ShowAdTypeList1, "Value", "Text", Model.ST1), 
    new { @class = "dd2", @style = "width:80px;" }
) %>

这假定ShowAdTypeList1属性是IEnumerable<SelectListItem>。如果不是,您可能需要调整ValueText参数。

此外,我建议您不要清除整个模型状态,而是只重置您在POST操作中修改的属性:

ModelState.Remove("ALS.ST1");
data.ALS.ST1 = 2;
return View(data);