选择列表是否属于视图模型

本文关键字:视图 模型 属于 是否 列表 选择 | 更新日期: 2023-09-27 18:36:26

看完这个问题ASP.NET MVC:将视图模型嵌套在彼此内部,反模式还是没有?

和德里克贝利的评论

我认为"考虑您的视图模型看起来像 XML 或 JSON"位可能是最重要的一点,在这里。我经常使用它 透视,帮助我了解视图模型应该是什么样子 喜欢,并帮助我了解哪些数据是"视图模型"数据与"数据" 这继续视图的 HTML 渲染"。有助于保持东西 清洁并将它们分开 – 德里克贝利 四月 11 '11 在 15:45

这让我想知道如何为具有数据绑定选择项的 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 使用视图中选定值的选择列表

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

选择列表是否属于视图模型

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

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

并在您的视图中,按如下方式填充视图模型:

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

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

但这只是我个人的看法。 我认为创建选择列表以明确在视图中显示数据是愚蠢的。