gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:36:50 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;

我用两种不同的方式设置 View 包。两种方法似乎都正确绑定(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