【问题标题】:C# MVC2 DropDownListFor bug after submitC# MVC2 DropDownListFor 提交后的错误
【发布时间】:2013-03-08 04:55:48
【问题描述】:

我正在尝试使用下拉菜单修复 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);
 }

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

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

【问题讨论】:

  • 我可能在这里遗漏了一些东西 - 但是您是否在 GetMyDropdown 的相应 SelectListItem 中设置 Selected 属性?
  • 是的,但我在帖子中省略了它,因为我认为使用 Html.DropdownListFor 会自动使用模型绑定设置所选项目?
  • 你看过这个类似的问题吗? stackoverflow.com/questions/1916462/…
  • 所有答案似乎都不起作用。在我的助手类中,我正在分配正确项目的 Selected 属性,但下拉列表仍然没有更新。我还可能会提到它不仅会重置回我的空选项,它只会停留在用户提交表单时的任何状态。此外,我的模型值是一个可为空的 int,这可能会导致问题。

标签: asp.net-mvc-2


【解决方案1】:

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

这不是错误,这是设计使然...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多