gpt4 book ai didi

asp.net-mvc-2 - Asp.net MVC 2、MvcContrib 和具有重定向操作的基本 Controller

转载 作者:行者123 更新时间:2023-12-02 13:17:49 24 4
gpt4 key购买 nike

我有一个基本 Controller ,它需要几个泛型,没有什么太花哨的。

public class SystemBaseController<TForm, TFormViewModel> : Controller
where TForm : class, IForm
where TFormViewModel : class, IViewModel

好吧,没什么大不了的。我有一个方法“CompleteForm”,它接受 viewModel,看起来有点像这样......

    public ActionResult CompleteForm(TFormViewModel viewModel)
{
//does some stuff

return this.RedirectToAction(c => c.FormInfo(viewModel));
}

问题是,继承这个的 Controller ,就像这样

public class SalesFormController :  SystemBaseController<SalesForm, SalesViewModel>
{ }

我最终从 MvcContrib 收到错误 - 此时 Controller 名称必须以“Controller”结尾 ...

    public RedirectToRouteResult(Expression<Action<T>> expression)
: this(expression, expr => Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression(expr)) {}

传入的表达式是正确的(SystemBaseController blahblah),但我不确定为什么它 1.) 说最后没有 Controller ,2.) 如果我将所有内容都拉到 Controller 中(从底座中取出) ),工作得很好。我是否需要编写或设置自己的某种操作过滤器,或者我缺少什么?

最佳答案

好吧,现在我看到所有这些都写出来了,我想我明白了问题所在。

MvcContrib 通过从您传入的 lambda 表达式(而不是 Controller 类型)推断来确定要调用的 Controller 。所以当你说this.RedirectToAction(c => c.FormInfo(viewModel));时,它查看 lambda 表达式并推断 T 的类型为 SystemBaseController<TForm, TFormViewModel> ,而不是 SalesFormController。

您可能需要做的是将基类更改为 SystemBaseController<TForm, TFormViewModel, TController>这样你就可以说this.RedirectToAction<TController>(c => c.FormInfo(viewModel)); 。这可能会起作用。

关于asp.net-mvc-2 - Asp.net MVC 2、MvcContrib 和具有重定向操作的基本 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463781/

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