在MVC中的Controller外创建ViewData

时间:2015-02-26 20:25:42

标签: model-view-controller controllers viewdata

我在创建ViewData的控制器中有一个方法。例如这一个

private void CreateFKViewData(OSQDCOL osqdcol, OSADCOL osadcol, IList<OSADCOL> targetTBLcols)
{
        ...
ViewData[osadcol.ColName] = new SelectList(SelectListItems, "key", "value", SelectListItems.First().Key);
}

如果该方法放在控制器内,一切都按预期工作。我想将该方法移出我的控制器并将其放入BLL层中的另一个类中。问题是ViewData在控制器范围之外是不可访问的。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我假设你正在使用ASP.NET MVC和C#。不确定将控制器通常会在控制器之外的类中所做的问题传播开来是一个好主意,但是可以说你的问题的原因是你的控制器类继承自Controller的事实使得ViewData可用。继承自ControllerBase(提供ViewData的地方)。因此,假设您想从控制器中调用另一个类中的方法,并且您希望该方法能够操作ViewData。请考虑以下事项:

public class TestController : Controller
{
    // GET: Test
    public ActionResult Index()
    {
        var externalclass = new SomeRandomClass(this);
        externalclass.DoStuff();
        return View();
    }
}

public class SomeRandomClass
{
    ControllerBase _callingController = null;
    public SomeRandomClass(ControllerBase callingController)
    {
        this._callingController = callingController;
    }
    public void DoStuff()
    {
        this._callingController.ViewData["hello"] = "world";
    }
}