gpt4 book ai didi

c# - 无法让 asp.net MVC4 DropDownList() 具有预设值

转载 作者:行者123 更新时间:2023-12-02 04:39:33 24 4
gpt4 key购买 nike

我真的没有看到关于如何通过 ViewBag 执行此操作的任何答案。 (我知道我们都讨厌 ViewBag,我应该使用 ViewModel。不过这不是我的问题,我需要知道如何在不设置 ViewModel 的情况下做到这一点)。

这是我为页面的 GET 请求设置的 Controller :

var states = Ctx.States.ToList()
.Select(state => new SelectListItem
{
Text = state.Name,
Value = state.Name
}).OrderBy(x => x.Text).ToList();

ViewBag.SelectedStateOne = new SelectList(
states,
"Text",
"Value",
user.Applicant.FinancialAidInformation.FinancialAidContacts
.ElementAtOrDefault(0).Address.State.Name);

ViewBag.SelectedStateTwo = states;

我正在以两种不同的方式设置 viewbag。这两种方式似乎都正确地绑定(bind)了下拉菜单,并正确地回发了选定的值。但是当我返回页面时,默认选择不是数据库中的值。

在我看来:

@Html.DropDownList("SelectedStateOne", null, new { @class = "form-control" })
@Html.DropDownList("SelectedStateTwo", null, new { @class = "form-control" })

相同的下拉菜单,但我想同时显示两者是为了避免混淆。我认为我对 SelectedStateOne viewbag 数据所做的是设置默认值的正确方法,但没有骰子。我哪里错了?

最佳答案

因为你想指定一个默认值,使用SelectList是更简单的方法,所以让我们使用它。

首先,您的原始查询是不必要的。 SelectList可以使用 IEnumerable<T> 构建,这意味着您不必投影到 SelectListItem首先。所以这个:

var states = Ctx.States.ToList()
.Select(state => new SelectListItem
{
Text = state.Name,
Value = state.Name
}).OrderBy(x => x.Text).ToList();

变成:

var states = Ctx.States.OrderBy(x => x.Name).ToList();

现在您可以简单地将列表分配给 ViewBag使用你的 Name属性代替:

// Removed the long type name for clarity
ViewBag.SelectedStateOne = new SelectList(states, "Name", "Name", YourSelected.State.Name);

View 中的调用保持不变:

@Html.DropDownList("SelectedStateOne", null, new { @class = "form-control" })

如果它仍然没有选择正确的项目,请仔细检查以确保 YourSelected.State.Name存在于你的 states列表。

关于c# - 无法让 asp.net MVC4 DropDownList() 具有预设值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169234/

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