我不积极,但我认为这是一个 MVC 路由问题。我仍然不完全理解路由在 MVC 中是如何工作的。
假设我有几个操作方法,我已将自定义过滤器属性应用于:
[MyAttribute]
public ActionResult Method1()
{
...
}
[MyAttribute]
public ActionResult Method2()
{
...
}
这些方法通常不接受任何参数。不幸的是,要求已经改变,现在所有这些方法都可能接收一个名为“MyParameter”的可选参数。如果传入参数,则将设置 ViewBag 中的属性。
在实际项目中,这些方法大约有 70 种。我希望通过“MyAttribute”过滤器来做到这一点,因为它已经存在。所以我会在“MyAttribute”过滤器中添加这样的东西:
public class MyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
... // other existing code
// If a certain parameter was passed, I want to set a ViewBag property.
if( filterContext.ActionParamenters.ContainsKey("MyParameter") )
filterContext.Controller.ViewBag.MyProperty = filterContext.ActionParamenters["MyParameter"];
}
}
但除非方法的定义中有“MyParameter”作为参数,否则它不会在 ActionParameters 集合中看到它。这就是让我认为这是一个路由问题的原因。
我真的希望不需要将参数添加到所有方法,但如果没有其他方法,那么我可以。任何建议或想法将不胜感激。