看完这个问题后 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
我已经测试了这个实现,它做了我认为我想做的事情。我不打算急于回答,因为我还没有完全审查过这个问题。
答案 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是为了在视图中显示数据的明确目的是愚蠢的。