在ASP.NET MVC框架中编写ViewDataDictionary

时间:2009-11-26 02:49:28

标签: asp.net-mvc

而不是:

public ActionResult Index()
{
    ViewData["foo"] = _repository.GetFoos().ToList();
    ViewData["bar"] = new string[] { "blah" };
    ViewData["baz"] = "";
    return View();
}

然后:

public ActionResult Index(string baz)
{
    // Do stuff...

    ViewData["foo"] = _repository.GetFoos().ToList();
    ViewData["bar"] = new string[] { "blah" };
    ViewData["baz"] = baz;
    return View();
}

我正在考虑通过使ViewData更加结构化来减少拼写错误的方法,而不必添加(还)另一个ViewModel类。我想出了以下内容:

public ActionResult Index()
{
    var foo = _repository.GetFoos().ToList();
    var bar = new string[] { "blah" };
    var baz = null;

    ViewData = new ViewDataDictionary {
        {"foo", foo},
        {"bar", bar},
        {"baz", baz }
    };

    return View();
}

public ActionResult Index(string baz)
{
    var foo = _repository.GetFoos().ToList();
    var bar = new string[] { "blah" };
    var baz = null;

    // Do Stuff...

    ViewData = new ViewDataDictionary {
        {"foo", foo},
        {"bar", bar},
        {"baz", baz}
    };

    return View();
}

像这样覆盖ViewData是个坏主意吗?我很确定这不会导致RenderPartials出现问题,但是我不能再在视图中调用RenderAction吗?

1 个答案:

答案 0 :(得分:1)

  

覆盖它是一个坏主意   这样的ViewData?

没有。这不是坏主意。但这并不常见。

  

我很确定   这不会导致问题   RenderPartials,但我不会再这样做了   能够在一个中调用RenderAction   查看?

你应该对这一切都很好。

但是在你的代码中有一个llok而不会覆盖ViewData。

没有消除任何拼写错误 r。在这两种情况下,您都有相同数量的魔术字符串

所以我仍然建议添加ViewModel 。为简单起见,只需在控制器类中定义ViewModel,这样您就可以在一个地方完成所有操作。