gpt4 book ai didi

c# - MVC4 中未在 DropDownListFor() 上设置所选值

转载 作者:行者123 更新时间:2023-11-30 15:34:33 24 4
gpt4 key购买 nike

这个问题好像被问过很多次了。但这让我抓狂。

这是我的(简化的)模型。

public class UserEditModel
{
[Required]
public string Title { get; set; }

private IEnumerable<SelectListItem> _titleList;
public IEnumerable<SelectListItem> TitleList
{
get { return _titleList.Select(x => new SelectListItem {
Selected = (x.Value == Title),
Text = x.Text,
Value = x.Value
});
}
set { _titleList = value; }
}
}

TitleList 成员中每个 SelectListItemTextValue 属性是相同的。例如:

new SelectListItem { Text = "Mr", Value = "Mr"  }

当发布以下代码时,正确的 Title 值被绑定(bind)到模型,但是每当模型被推送到 View 以响应 POST 或 GET 时,所选值不是在下拉列表中设置,即使所有智能感知都显示存在正确的值。

@Html.DropDownListFor(x => x.Title, Model.TitleList)

我已经根据几篇文章和几个 SO 答案确保代码是正确的,所以我很难过。

有什么建议吗?

更新:

为了完整起见,这是 Action 和支持方法:

[HttpGet]
public ActionResult Edit(int id)
{
var user = _userService.Get(id);

var model = new UserEditModel()
{
...
Title = user.Title,
TitleList = ListTitles()
};

return View(model);
}

private IEnumerable<SelectListItem> ListTitles()
{
var items = new[] {
new SelectListItem() {Text = "Mr", Value = "Mr" },
new SelectListItem() {Text = "Mrs", Value = "Mrs"},
new SelectListItem() {Text = "Ms", Value = "Ms"},
new SelectListItem() {Text = "Miss", Value = "Miss"},
new SelectListItem() {Text = "Professor", Value = "Professor"},
new SelectListItem() {Text = "Dr", Value = "Dr" }
};

return items;
}

如您所见,没有什么特别的,只是一个简单的实现。

最佳答案

您需要添加 ModelState.Clear() 因为默认情况下,当从 post 操作返回 View 时,它认为它没有通过验证,所以使用 ModelState 并且不是模型中的值。许多人认为这实际上是 MVC 中的一个错误,但这是设计使然:

ASP.NET MVC assumes that if you’re rendering a View in response to a HttpPost, and you’re using the Html Helpers, then you are most likely to be redisplaying a form that has failed validation. Therefore, the Html Helpers actually check in ModelState for the value to display in a field before they look in the Model. This enables them to redisplay erroneous data that was entered by the user, and a matching error message if needed.

Link

关于c# - MVC4 中未在 DropDownListFor() 上设置所选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054830/

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