0

我不积极,但我认为这是一个 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 集合中看到它。这就是让我认为这是一个路由问题的原因。

我真的希望不需要将参数添加到所有方法,但如果没有其他方法,那么我可以。任何建议或想法将不胜感激。

4

2 回答 2

0

这在动作过滤器中不起作用吗?

ViewBag.MyProperty = 
  filterContext.Controller.ValueProvider.GetValue("MyParameter").AttemptedValue;
于 2012-08-29T16:22:52.207 回答
0

我发现并使用了这个:

ViewBag.MyProperty = filterContext.HttpContext.Request.Prams["MyParameter"];
于 2012-08-29T16:53:35.490 回答