代码之家  ›  专栏  ›  技术社区  ›  wm_eddie

在ASP.NET MVC框架中重写ViewDataDictionary

  •  0
  • wm_eddie  · 技术社区  · 15 年前

    而不是:

    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();
    }
    

    这样覆盖视图数据是个坏主意吗?我很确定这不会导致渲染部分出现问题,但我是否不再能够在视图中调用渲染?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Dmytrii Nagirniak    15 年前

    覆盖 像那样查看数据?

    不,这主意不错。但这并不常见。

    我很确定 这不会导致 渲染部分,但我会不再 能够调用 视野?

    你应该对这些都没意见。

    但是在代码上进行一个a llok,而不重写viewdata和之后的代码。

    没有消除任何错别字错误 你有 相同数量的魔法字符串 在这两种情况下。

    所以我还是会 建议添加视图模型 . 为了简单起见,只需在Controller类中定义您的ViewModel,这样您就可以在一个地方拥有它。