gpt4 book ai didi

asp.net-mvc - EnumDropDownListFor 不选择值,尽管值已传递给 View

转载 作者:行者123 更新时间:2023-12-02 20:48:15 25 4
gpt4 key购买 nike

童话般的情况,我需要允许用户从 ASP.NET MVC 应用程序中的枚举中选择一个值。由于我使用的是 MVC 5.2 版,因此我可以简单地执行以下操作:

// Model
public MyEnum EnumVal { get; set; }

// Controller
return View(new MyModel{EnumVal = MyEnum.SomeVal});

// View
@Html.EnumDropDownListFor(model => model.EnumVal)

这一切都神奇地起作用了。我已经这样做了足够多次,认为这是理所当然的。

但我刚刚注意到我传递的值没有被选为下拉列表的当前值。

我可以吐出模型的内容来验证该值是否正确传递,但下拉列表仅选择了第一个值。

其他答案(例如 herehere )似乎证实了我认为我知道的事情:我不需要做任何额外的事情来让下拉菜单选择我传递的值。

我是不是脑子有问题?为什么这不起作用?


更新

这是 Controller 方法的更完整列表:

public ActionResult Create(string enumVal)
{
var valueToPass = AccountsDestination.QbDUk;
Enum.TryParse(enumVal, out valueToPass);
return View(new QuickBooksMappingViewModel(){EnumVal = valueToPass});
}

最佳答案

问题是您的方法有一个参数enumVal(与您的模型属性同名)。当该方法执行时,DefaultModelBinder 会将参数的值添加到 ModelState

在 View 中,EnumDropDownListFor() 方法首先检查 ModelState 中的匹配项(然后是 ViewData,最后是您的模型值),其中它查找并尝试将选择选项设置为 ModelState 中的值。有关为什么这是默认行为的解释,请参阅 TextBoxFor displaying initial value, not the value updated from code .

在您的情况下,参数的值要么是第一个选项的值,要么与任何选项值都不匹配(并且选择第一个选项是因为必须选择某些选项)。

要么更改参数的名称,使其与您的模型属性之一不同,要么您可以使用 ModelState.Clear();ModelState.

关于asp.net-mvc - EnumDropDownListFor 不选择值,尽管值已传递给 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43341673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com