【发布时间】:2015-08-15 11:06:20
【问题描述】:
我有一个用例,我在控制器中为 GET 和 POST 操作使用了不同的模型。这对我的观点很有效,因为大部分数据都进入了标签。 GET 方法的模型包含 10 个属性,而 POST 方法的模型只需要 3 个。
这个 GET 视图呈现一个表单,它只需要其中的 3 个属性,而不是全部 10 个。因此,POST 方法的模型接受仅包含这 3 个属性的模型类。因此,ASP.Net MVC 模型绑定器仅使用这 3 个必要属性填充我的 POST 方法上的模型类参数,一切都很好。
问题来了:当我在POST方法中遇到一些业务规则违规,想使用ModelState.AddModelError,重新显示原来的视图时,我已经没有这7个属性了未发布,因为它们不是表单的一部分,也不是此方法作为其参数的模型类的一部分。
目前,我正在调用构建器以返回 POST 方法的模型类实例,并让 GET 方法本身委托给同一个构建器。因此,在这些情况下,当 POST 方法中存在某些业务规则违规时,我会返回一个 View("OriginalGetView", originalGetModel)。在这种情况下,如何在 POST 方法中使用 ModelState.AddModelError,如果我想使用完全不同的模型类将自定义消息发送回视图?
考虑到它们的需求是如此不同,对 GET 和 POST 方法使用相同的模型类似乎太懒了。这里的最佳做法是什么?我看到很多人建议对这两种方法使用相同的模型,并从隐藏的表单字段中返回所有字段,但这在大多数情况下似乎是浪费带宽,而且感觉很难看当我已经拥有“VendorId”时,将“VendorName”之类的内容发送回服务器。
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-5