【问题标题】:Do SelectLists belong in viewModels?SelectLists 是否属于 viewModels?
【发布时间】:2012-06-07 14:17:08
【问题描述】:

看完这个问题 ASP.NET MVC: Nesting ViewModels within each other, antipattern or no?

还有德里克·贝利的评论

我认为“考虑一下您的视图模型看起来像 xml 或 json”位可能是最重要的一点,在这里。我经常使用它 透视图来帮助我理解视图模型应该是什么样子 喜欢,并帮助我了解什么是“viewmodel”数据与“数据” 在视图的 HTML 渲染中进行”。有助于保持东西 清洁并很好地分开它们 – Derick Bailey 2011 年 4 月 11 日 15:45

这让我想知道如何为带有数据绑定选择项的 ViewModel 创建一个视图。我真的很挣扎,因为我无法想象SelectList 所属的位置。如果我考虑 JSON 或 XML,那么 SelectList 是仅查看的一部分。我想要的只是一个下拉列表,其中预先填充了一个值列表,供用户选择Location 将它放在 ViewModel 中似乎是错误的,但是当我考虑将它移到 View 时,我不知道在哪里放置逻辑从数据库中提取以填充选择列表

public class SearchViewModel
{
    public int? page { get; set; }
    public int? size { get; set; }
    //Land Related search criteria        
    [IgnoreDataMember]
    public SelectList LocationSelection{ get; set; }

更新

这是一个很好的问题和答案,它确实密切相关 C# mvc 3 using selectlist with selected value in view

我已经测试了这个实现,它做了我想做的事。我不会急于选择答案,因为我还没有完全审核过。

【问题讨论】:

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


    【解决方案1】:

    我会按照以下几行重构您的视图模型,因为我认为选择列表不应该属于视图模型:

    public class SearchViewModel
    {
        public int? page { get; set; }
        public int? size { get; set; }
        //Land Related search criteria        
        public IEnumerable<Location> LocationSelection{ get; set; }
    }
    

    在您的视图中,按如下方式填充 viewModel:

    public ActionResult Search()
    {
        var viewModel = new SearchViewModel()
        {
            viewModel.LocationSelection = _repository.All<Location>()
        };
    
        // any other logic here or in service class
        return View(viewModel);
    }
    

    然后在您的视图中,您将使用 html.dropdownlist 助手来显示您的项目。 为我工作

    【讨论】:

      【解决方案2】:

      我尽量避免使用 SelectList,因为它们似乎不太适合 MVC 模型。相反,我创建了帮助程序来从模型中的 IEnumerable 类型生成我的 HTML 元素。我认为这保持了模型中保留纯数据和视图中显示逻辑的一般规则。

      但这只是我个人的看法。我认为为了在视图中显示数据的明确目的而创建 SelectLists 是愚蠢的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        • 2010-11-01
        相关资源
        最近更新 更多