调用每个视图时的Asp.Net MVC调用方法

时间:2014-04-13 15:20:56

标签: asp.net-mvc

我有一些ViewBag需要在调用它们时传递给每个视图 例如:

public ActionResult Index()
{
   ViewBag.Importan1 = "A";
   ViewBag.Importan2 = "B";
   return View();
}

public ActionResult Detail()
{
   ViewBag.Importan1 = "A";
   ViewBag.Importan2 = "B";
   return View();
}

我想:

public ActionResult Index()
{
   return View();
}

public ActionResult Detail()
{
   return View();
}

但ViewBag Important1和Important2被称为隐式。

2 个答案:

答案 0 :(得分:0)

您可以为控制器编写一个超类,将Index和Detail定义为虚拟(以便能够覆盖它们并添加一些额外的功能),并在您的基类中设置Important1和Important2

public class MyController : Controller
{
public virtual ActionResult Index()
{
   ViewBag.Importan1 = "A";
   ViewBag.Importan2 = "B";
   return View();
}

public virtual ActionResult Detail()
{
   ViewBag.Importan1 = "A";
   ViewBag.Importan2 = "B";
   return View();
}


}

就是这样,你在所有控制器中都有你想要的行为的索引和细节,这些控制器是从示例中继承自MyController的

public class Controller1 : MyController
{
  public override ActionResult Index()
  { 
    var result = base.Index();
    //do some manipulation here
    return result;
  }
}

另一种解决方案

你可以写这个控制器(我没有在我的电脑上查看)

public class MyController : Controller
{

  protected override void OnActionExecuting(
    ActionExecutingContext filterContext)
  {
     //write your custom code here
  }
}

然后从MyController继承您的控制器

另一种解决方案

使用filterActionAttribute并编写自己的文件管理器操作属性

答案 1 :(得分:0)

我建议你custom filter attribute。你创建它(这里有一些很好的例子http://msdn.microsoft.com/en-us/library/dd381609(v=vs.100).aspx)并完成所有工作。然后,您只需在控制器上应用过滤器,它将影响您的所有操作方法。