【问题标题】:MVC 5 possible to use only part of a model for the view?MVC 5 可以仅将模型的一部分用于视图吗?
【发布时间】:2016-11-26 13:57:21
【问题描述】:

如果我有一个数据库并且我的所有模型都基于该数据库(基本上使用 LINQ 来获取/设置数据)。是否可以只使用这些模型的一部分来创建我的视图?假设我在一个表中有三个列,而我的视图只需要两个列,我可以使用我的数据库模型简单地使用三个列中的两个,还是应该创建一个新模型以在我的视图中使用。

如果我必须创建新模型,有什么简单的方法可以做到这一点吗?我正在使用 Visual Studio 2015。

谢谢

【问题讨论】:

标签: asp.net-mvc model-view-controller


【解决方案1】:

在将数据放入视图时,通常会创建 View Models 来表示域模型的一部分。

例如,您可能有一个BookViewModel 和一个BookEditModel。您可以根据模型显示和允许编辑不同的字段。

class BookViewModel 
{
    [ReadOnly]
    public string ISBN { get; set;}
    [ReadOnly]
    public string Title { get; set;}
    [ReadOnly]
    public string Author { get; set;}
}

class BookEditModel 
{
    [ReadOnly]
    public string ISBN { get; set;}
    [Validate(...)]
    public string Title { get; set;}
    [Validate(...)]
    public string Author { get; set;}
    [ReadOnly]
    public DateTime LastUpdated {get;set;}
}

如果您正在寻找一种创建这些视图模型的简单方法,有一个名为 AutoMapper 的工具可以让您轻松地在域模型和视图模型之间进行映射。

【讨论】:

  • 所以基本上我应该创建新的视图模型,对吗?
  • 好的,谢谢! :) 我会接受的。
  • 还有一个问题:如果我的模型对两者都相同,我应该创建一个单独的视图模型还是使用那个可以?我猜会使它更有条理,但这意味着重复的代码。
  • 如果确实是 1:1,您可能有“重复”代码,但您也获得了分离的灵活性:假设您将来向数据库表添加 5 个新列但您没有不想让你的前端知道它们。拥有您的视图模型可以保证这一点。另一方面:假设您的视图模型需要连接一些字段以进行显示(即名称=第一个+中间+最后一个)。您的数据库模型不必知道这一点。总而言之:随着您的应用变得越来越复杂,视图模型(以及通常的关注点分离)的价值呈指数级增长。
  • 很有道理。谢谢! :)
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多