C#MVC2 DropDownListFor提交后的bug

时间:2012-11-09 10:18:03

标签: asp.net-mvc-2

我正在尝试使用下拉列表修复MVC2页面上的错误。我的问题是,在提交表单后,我在模型服务器端更改了下拉列表中的值,但是当再次呈现视图时,未选择新值。

我已在视图中定义了我的下拉列表。

<%= Html.DropDownListFor(m => m.MyValueId, MyHelperClass.GetMyDropdown())%>

我有一个帮助类来生成我的下拉列表,该函数看起来像这样。

public static List<SelectListItem> GetMyDropdown()
{
    List<SelectListItem> options= new List<SelectListItem>();
    options.Add(new SelectListItem { Text = "None", Value = string.Empty });
    options.Add(new SelectListItem { Text = "MyValue", Value = "1" });
    //and more options added in the same way
}

在我的视图页面上,我还有一个提交按钮,允许用户重新计算我的下拉列表的值。当用户单击按钮时,表单将被提交,控制器操作将如下所示。

[HttpPost]
public ActionResult MyViewName(MyModel model, string submitButton)
{
    //check for my submit button value
    if(submitButton == "Recalculate")
    {
        int newValue = 0;
        //some logic to set the new value
        model.MyValueId = newValue;
    }
    return View(model);
 }

当我调试代码时,我可以看到在模型中创建并正确设置了新值。我可以在我的dropdown generate方法中看到列表已正确创建,并且存在一个包含新值的选项。在视图中,我可以调试并查看模型仍然具有正确的值,但由于某种原因,下拉列表始终是第一个选项 - Text =“None”Value =“”。

我尽可能地简化了我的代码以避免混淆,但如果需要,我会更详细地解释。有谁知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

ModelState.Clear()之前执行return View(model) 资料来源:http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

这不是一个错误,它是设计......