在ASP.MVC视图模型中分隔GET和POST字段

时间:2014-11-12 15:04:47

标签: c# asp.net asp.net-mvc asp.net-mvc-4

假设我们有一个包含单个下拉列表的视图的视图模型。视图模型应该有两个字段:

  • 下拉列表列表
  • 所选项目

区分它们是否合理,例如将它们分组如下:

public class ExampleVM
{
    #region GET

    public List<SelectListItem> Items { get; set; }

    #endregion

    #region POST

    public int? SelectedItem { get; set; }

    #endregion
}

或许还有另一种区分这些领域的方式?

1 个答案:

答案 0 :(得分:5)

理论上这些是单独的模型。一个用于视图渲染(称为视图模型),另一个用于输入处理(称为输入模型)。如果您愿意,您甚至可以为每个类定义不同的类。实际上,这些模型在实践中通常在很多方面彼此相似,保留两个非常相似的模型类是多余的。

考虑单个文本框表单的情况。视图模型是一个字符串,表示文本框的当前值。输入模型是具有相同名称的单个字符串,表示用户的输入(如果有)。因此,在建模时,您可以使用单个字符串属性创建两个类,或者可以为两个类使用一个类。

您的下拉列表似乎不同,因为您需要两个属性,一个用于呈现列表,另一个用于已发布的选定项。但它似乎只是这样。只要您不仅需要用户输入新值而且还要更新现有值,您将发现您还使用选定值属性进行查看(代码中的GET部分)。所以再次重用。

有关ASP.NET MVC模型的更深入解释,请查看Dino Esposito的this article

结论:是的,你的区别是合理的,但有些人可能认为这是不切实际或过剩的。