【问题标题】:Should MVC models contain content just for the responseMVC 模型是否应该包含仅用于响应的内容
【发布时间】:2013-08-16 09:14:19
【问题描述】:

我有一个测验风格的 MVC 应用程序。我目前正在进入视图:

public class Question{
    public int QuestionId;
    public string QuestionText;
    public string AnswerText;
    public int Answer;
}

然而,在所有响应中,我只需要(并获取)两个 int 属性,字符串值为空。所以我的问题是,你认为我的模型应该只包含两个 int 属性,我应该在ViewData/ViewBag 中传递字符串属性吗?

【问题讨论】:

  • 看看视图模型。如果您的应用程序不是一个复杂的应用程序,使用 ViewData/ViewBag 也可以。但是,不要公开您的 Question 模型以直接查看。很危险。
  • 以下建议对您有帮助吗?

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


【解决方案1】:

在回答您的问题时,是的,我认为应该如此。在这种情况下,我将创建一个从视图返回的 Answer 类,并且只包含您感兴趣的 2 个 int 属性:

public class Answer{
    public int QuestionId;
    public int Answer;
}

您的控制器动作接收到这个可以接受Answer 类型的参数,模型绑定将正确填充。如果您不需要从视图中返回字符串属性,请不要传递它们。如果您确实需要它们,请将它们添加到 Answer 类中。根本不需要为此使用 ViewData 或 ViewBag。根据@emre-nevayeshirazi 的建议,我还将它们重命名为QuestionViewModelAnswerViewModel。然后,在将它们传递给域层之前,我会将它们映射到它们的等效域类。

【讨论】:

    【解决方案2】:

    像下面那样拆分视图模型

    public class Question : QuestionAnswerId
    {
        public int QuestionText;
        public int AnswerText;
    }
    
    public class QuestionAnswerId
    {
        public int QuestionId;
        public int Answer;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多