【问题标题】:MVC 5 Controller Method ConsolidationMVC 5 控制器方法整合
【发布时间】:2015-10-17 16:56:05
【问题描述】:

我希望将 MVC 5 项目中的一些控制器功能卸载到单个功能。传入的两个视图都继承自基础视图。

CompetitionsViewModel:CompRegisterViewModel

到目前为止,这似乎有效:

        private async Task<bool> RegisterUser(RegisterViewModel model, string returnUrl = "")
            {...}

调用代码:

bool passed = await RegisterUser(model);

不过有几个问题:

  1. 当其中一个控制器使用从另一个视图继承的视图并且您希望为此设置一个单独的函数时,这是解决此问题的正确方法吗?
  2. 在这个函数中使用异步有什么需要注意的吗? - 模型错误 (ModelState.AddModelError) 在这个函数中会按预期工作吗?表面上看起来一切正常,但在此之前我确实有大量自定义 JQuery 处理大量错误纠正。
  3. 即使这是一个异步过程,模型是否仍会作为 ref 传递(现在不太关心,但只是为了将来了解)。

基本上这里发生的是我有一个可以注册的购物车。您也可以独立于购物车进行注册,因此我使用共享视图进行注册。因此,两个父视图都实现了子视图,因此视图模型的继承似乎是最智能的路线。

我在表格上看到的选项是:在两个控制器函数中重新创建流程(重复代码?..维护噩梦),创建接口(添加字段/更改字段时必须在多个位置更新?),或者做我所做的 - 一个处理两者的单个函数,而调用方法处理它们的非继承功能。

您是否看到第四个更好的选择,或者我的解决方案似乎可以接受?

【问题讨论】:

    标签: c# asp.net-mvc controller asp.net-mvc-5


    【解决方案1】:

    这个问题的答案如下:

    1. 仍然不确定最佳实践,但它确实可以正常工作。
      • 至于这是否被认为是好的做法,我认为复制代码是非常糟糕的做法,所以就这样吧。
    2. 工作正常 - AddModelError 等工作正常。
    3. 在正常情况下,对象是通过引用传递的,所以我现在假设“是”。如果我遇到问题会更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 2013-12-05
      • 2015-12-04
      相关资源
      最近更新 更多