kil*_*net 9 asp.net asp.net-mvc
我想知道,为什么每个人都非常讨厌 ViewData?
我发现它非常有用和方便.我告诉你原因:通常每个控制器动作都有它自己的ViewModel,因此它只使用一次,我发现每次我需要添加额外的数据部分来修改ViewData类时非常繁琐(向类中添加额外的字段通常会导致修改它的构造函数).相反,我可以写入控制器
ViewData["label"] = someValue;
// in mvc 3 even better:
ViewData.Label = someValue
Run Code Online (Sandbox Code Playgroud)
在视野中
<%= ViewData["label"] %>
<%-- mvc 3: --%>
<%= ViewData.Label %>
Run Code Online (Sandbox Code Playgroud)
或者对于复杂类型:
<% ComplexType t = (ComplexType)ViewData["label"]; %> // and use all benefits of strong typing
<%= t.SomeProperty %>
Run Code Online (Sandbox Code Playgroud)
编写控制器操作当我需要添加一些数据来查看时,我不必切换到另一个类.对我来说这是一个很大的好处:不要让你的项目充满无意义的课程,并在他们和其他人之间切换.
我同意使用"魔术字符串"可能导致编译器无法捕获的错误,但这些错误本地化在代码的很小一部分中,并且可以非常快速地发现.此外,您如何看待使用动态语言(rails,django)的人在没有强力打字的情况下生活?)
您对使用ViewData有何看法?
我认为这不仅仅是魔术字符串参数.我认为ViewModels是一件好事,而不是毫无意义的类,因为它们有助于使视图更清晰,更容易阅读,而不是在整个视图中访问ViewData.
当您获得需要在视图中显示的五个,十个,二十个数据时,您是否真的要将所有数据作为ViewData传递?这将使您的观点更难以遵循,并且数据没有任何意义.创建一个ViewModel并向该ViewModel强烈键入视图不仅会使代码更容易阅读,而且您不必在代码中遍布ViewData对象.
我认为ViewData对某些情况很有用,但是当你处理大量数据时,我认为很容易被滥用.
Weeellll .....
你为什么不这样写课?
public dictionary<string, object> myCollectionOfClasses;
myCollectionOfClasses.Add("MyClass", new MyClass);
public class MyClass
{
public string DoSomething
{
return "SomeString";
}
}
Run Code Online (Sandbox Code Playgroud)
你必须这样打电话给他们:
string myString = myCollectionOfClasses["MyClass"].DoSomething();
Run Code Online (Sandbox Code Playgroud)
现在哪个更傻?
另请参见
我们如何进行MVC - 查看模型
| 归档时间: |
|
| 查看次数: |
1007 次 |
| 最近记录: |