11

在阅读了这个问题 ASP.NET MVC: Nesting ViewModels within each other, antipattern or no?

和德里克贝利的评论

我认为“考虑您的视图模型将是什么样的 xml 或 json”位可能是最重要的一点,在这里。我经常使用这种视角来帮助我理解视图模型应该是什么样子,并帮助我理解什么是“viewmodel”数据与“视图的 HTML 渲染中的数据”。有助于保持物品清洁并很好地分开它们 – Derick Bailey 2011-04-11 15:45:37

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

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密切相关

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

4

2 回答 2

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 助手来显示您的项目。为我工作

于 2012-06-07T15:21:29.783 回答
0

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

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

于 2012-06-07T14:24:18.283 回答