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

标签 c# asp.net asp.net-mvc asp.net-mvc-4

我确实没有看到任何关于如何通过 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/

相关文章:

.net - ASP.NET MVC : AJAX ActionLink- Target an HTML attribute

c# - 使用 XUnit 测试动态扩展

c# - .Net Master Page Name Mangling 需要解决方法

c# - .NET [SuppressMessage] 运输程序集中的属性 fxcop

c# - 将数据表绑定(bind)到 gridview 的问题

c# - 处理具有共同属性但对象类型不同的对象的方法

c# - 使用 Html.Action() 时,PartialView ViewBag 数据在父 View 中不可用

javascript - 替换 html 后重启 Angular 应用程序

c# - 使用Reactive Extensions模拟UIElement的点击

c# - 使用 Winforms 应用程序分发 Access 数据库