.net 创建一个方法来提交表单,而无需在多个控制器中复制代码

pkln4tw6  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(111)

伙计们,我正在寻找一个解决方案,以避免重复时,我使相同的方法后几个控制器
你能告诉我一个解决方案,如何使一个方法与发送一个形式,我可以在任何控制器使用,并返回一个错误的模型?
我有几个控制器,其中我将有一个形式发送(在真实的项目中,它是一个服务与电子邮件发送)。
第一个
additional urlbase url显示器
为了避免代码重复,我尝试创建BaseController并在其中定义此表单的发送,但当我发布一个帖子时,我会转到另一个路径localhost://Base/...并且我需要停留在同一个url,例如localhost://Additional/...最大的问题不在该url中,当我成功发送表单时,一切正常,问题是当ModelState.IsValid == false...然后模型返回给我,但页面显示此url的视图不存在,或者在我的情况下重定向到PartialView,这是合乎逻辑的,因为我从父控制器发送表单...

nhhxz33t

nhhxz33t1#

当为多个控制器执行相同的POST方法时,有几种方法可以避免代码重复。一种方法是创建一个基本控制器,所有其他控制器都从该基本控制器继承。在基本控制器中,您可以定义POST方法,并让它返回一个带有错误的模型。然后,如果需要,其他控制器可以覆盖此方法。
另一种避免代码重复的方法是使用服务层。在服务层中,您可以定义POST方法并让它返回一个带有错误的模型。然后您的控制器可以调用服务层方法以避免重复代码。
例如,假设您有一个控制器需要向URL发出POST请求,您可以在基本控制器中定义一个方法,如下所示:

public class BaseController : Controller {
  [HttpPost]
  public IActionResult PostToUrl(string url, UserModel model) {
    if (ModelState.IsValid) {
      return Content("The Best");
    }

    return PartialView(@"~/Views/Shared/Partial/PostToUrl.cshtml", model);
  }
}

然后,其他控制器可以从BaseController继承并调用PostToUrl方法。
如果您需要从多个控制器发出相同的POST请求,您也可以创建一个服务层。在服务层中,您可以定义POST方法并让它返回一个带有错误的模型。然后您的控制器可以调用服务层方法以避免重复代码。
例如,假设您有一个控制器需要向URL发出POST请求,您可以在服务层中定义一个方法,如下所示:

public class MyService {
  public IActionResult PostToUrl(string url, UserModel model) {
    if (ModelState.IsValid) {
      return Content("The Best");
    }

    return PartialView(@"~/Views/Shared/Partial/PostToUrl.cshtml", model);
  }
}

然后,您的控制器可以调用MyService.PostToUrl方法以避免重复代码。

相关问题