gpt4 book ai didi

ASP.Net MVC - GET/POST 具有不同模型时的 ModelState.AddModelError

转载 作者:行者123 更新时间:2023-12-03 20:20:59 25 4
gpt4 key购买 nike

我有一个用例,我在 Controller 中对 GET 和 POST 操作使用了不同的模型。这对我来说非常有用,因为大部分数据都进入了标签。 GET 方法的模型包含 10 个属性,而 POST 方法的模型只需要 3 个。

这个 GET View 呈现一个表单,它只需要这些属性中的 3 个,而不是全部 10 个。因此,POST 方法的模型接受一个只包含这 3 个属性的模型类。因此,ASP.Net MVC 模型绑定(bind)器仅使用这 3 个必要属性填充我的 POST 方法上的模型类参数,一切正常。

问题来了:当我在POST方法中遇到一些违反业务规则,想使用ModelState.AddModelError,重新显示原来的 View 时,我不再有7个属性没有发布,因为它们不是表单的一部分,也不是此方法作为其参数的模型类的一部分。

目前,我正在调用构建器以返回 POST 方法的模型类实例,并将 GET 方法本身委托(delegate)给同一个构建器。因此,在这些情况下,当 POST 方法中存在一些违反业务规则的情况时,我将返回一个 View("OriginalGetView", originalGetModel)。在这种情况下,如果我想使用完全不同的模型类将自定义消息发送回 View ,我该如何在 POST 方法中使用 ModelState.AddModelError?

为 GET 和 POST 方法使用相同的模型类似乎太懒了,因为它们的需求如此不同。这里的最佳做法是什么?我看到很多人建议对这两种方法使用相同的模型,并将所有字段从隐藏的表单字段中 POST 回来,但是在大多数情况下这似乎是在浪费带宽,而且感觉很难看当我已经有了“VendorId”时,将“VendorName”之类的东西发送回服务器。

最佳答案

我可能误解了您的意图,但请确保您没有因小失大。我看到您可能只想发布标识符而不一定是描述符。但听起来您必须在发布后重新显示 View ...如果是这样,如果您发布与 get 中相同的模型,则可以访问模型属性。如果您只发布标识符,则必须花时间重新访问数据库以使用供应商 ID 号获取描述值(即您描述的供应商名称)?那不也是额外的处理吗?就像我说的,我可能会误解你的帖子,但为了保持一致性,使用相同的 View 模型来获取和发布 View 对我来说最有意义。

关于ASP.Net MVC - GET/POST 具有不同模型时的 ModelState.AddModelError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30582818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com