【问题标题】:MVC3 Collections in ViewModel or Populated from Ajax ServiceViewModel 中的 MVC3 集合或从 Ajax 服务填充
【发布时间】:2011-09-20 14:20:21
【问题描述】:

我正在 MVC3 中开发一个应用程序,它在很多页面上都有下拉列表来填充特定对象的选择。我的问题是在我的 ViewModel 中包含下拉列表的集合或调用服务来填充下拉列表是否更有意义。

例如,这样做是否更有意义:

public class MyViewModel
{
    public int SelectedFooId { get; set; }
    public IEnumerable<Foo> Foos { get; set; }
}

@Html.DropDownListFor(model => model.SelectedFooId, new SelectList(Model.Foos, "Id", "Name", "-- Select Foo --"))

或者有没有更好的方法通过从视图模型中删除 Foos 集合并通过 json 或其他方式使用 ajax 填充它来实现这一点?如果我打电话给服务,你能提供一个如何做到这一点的例子吗?我对 MVC 还比较陌生,并且正在尝试通过最佳实践来做所有事情,因为我不想养成任何坏习惯。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    这是在 ASP.NET MVC 应用程序中呈现下拉列表的好方法。您定义一个包含 2 个属性的视图模型:一个标量属性,用于将选定的值绑定到,一个集合用于将选项绑定到。然后,您让控制器操作填充此视图模型并传递给视图,并在视图内部使用 DropDownListFor 帮助器。

    在进行一些动态绑定时,使用 AJAX 填充下拉列表的值可能很有用。例如,您可以使用级联下拉列表来执行此操作,其中第一个 ddl 上的选择会影响第二个 ddl 的值。这是如何实现的example

    【讨论】:

    • 谢谢。如果我有多个下拉菜单来设置几个属性,比如五个呢?这仍然是一个很好的实现,还是会开始使模型变得混乱?
    • @shuniar,仍然是一个非常好的实现。请记住,视图模型类的作用是反映给定视图的要求。因此,如果您需要在视图中显示 5 个 ddls,您的视图模型上将有 5 个相应的标量属性来将选定的值绑定到,并有 5 个集合来将选项绑定到。
    • 感谢您的澄清。我将继续执行此实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多