ViewBag在控制器的静态方法中

lin*_*ann 2 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我是mvc的新手,我在一个控制器的方法中加载ViewBag,

HomeController: Controller
{
    Public ActionResult Index()
    {
        loadViewBag();
        return View();
    }

    public void loadViewBag()
    {
      ViewBag.aaa = "something";
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.

我的问题是,现在我想调用loadViewBag()方法形成另一个控制器(比如Account),这样我就可以重用同样的方法,并且由于一些静态变量需要使loadViewBag()方法静态: public static void loadViewBag() 如果我使用loadViewBag方法静态,ViewBag上出现错误" 非静态字段,方法或属性'System.Web.Mvc.ControllerBase.ViewBag.get' " 需要对象引用.

有没有解决方案/建议.

谢谢.

Jam*_*mes 9

只需将其作为ControllerBase的扩展方法即可

public static void ControllerExt
{
    public static void LoadViewBag(this ControllerBase controller)
    {
        controller.ViewBag.aaa = "something";
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以在任何控制器中使用它

public class HomeController : Controller
{
    public ActionResult Index()
    {
        this.LoadViewBag();
        return View();
    }
}

public class AccountController : Controller
{
    public ActionResult Index()
    {
        this.LoadViewBag();
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它只针对某些控制器,那么在例如中传递ViewBag属性会更灵活

public static class ControllerHelper
{
    public static void LoadViewBag(dynamic viewBag)
    {
         viewBag.aaa = "something";
    }
}

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ControllerHelper.LoadViewBag(ViewBag);
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)