SelectLists是否属于viewModels?

时间:2012-06-07 14:17:08

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

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

和Derick Bailey的评论

  

我认为“考虑你的viewmodel看起来像xml或者   json“bit可能是最重要的一点,在这里。我经常使用它   透视图,以帮助我理解视图模型应该是什么样子   喜欢,并帮助我理解什么数据是“viewmodel”数据与“数据”   继续视图的HTML呈现“。有助于保持事物   干净并将它们分开 - Derick Bailey 2011年4月11日15:45

这让我想知道如何使用数据绑定选择项为ViewModel创建视图。我真的很挣扎,因为我无法想象SelectList所属的地方。如果我考虑JSON或XML,那么SelectList是View Only的一部分。我想要的是一个预先填充的下拉列表,其中包含一个值列表,供用户选择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

我已经测试了这个实现,它做了我认为我想做的事情。我不打算急于回答,因为我还没有完全审查过这个问题。

2 个答案:

答案 0 :(得分:1)

我会沿着以下几行重构你的viewModel,因为我不相信selectlists应该属于viewmodel:

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帮助程序来显示您的项目。 适合我

答案 1 :(得分:0)

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

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

相关问题