ViewData 的替代品?

Posted

技术标签:

【中文标题】ViewData 的替代品?【英文标题】:Alternatives to ViewData? 【发布时间】:2011-01-10 17:58:19 【问题描述】:

我对 MVC、ASP.net 以及一般的服务器端脚本非常陌生。

我在 www.asp.net/mvc 上观看了一个教程视频,该视频的人正在解释一个模板。他解释说控制器使用 viewdata 向视图发送信息。

如果我错了,请纠正我,但我相信它是这样使用的:

控制器:ViewData["PropertyName"] = value;

查看:<p><%= ViewData["PropertyName"] %></p>

这是正确的用法吗?

与使用 ViewData 相比,有什么更好的方法来做到这一点,它有什么不好的地方?

【问题讨论】:

您真的应该在每个帖子中坚持一个问题。我会将“如何使用 html.Encode()”问题移至一个单独的问题,因为它与原始问题无关。 【参考方案1】:

在很多视图情况下,我会提倡使用 ViewData 集合。

在大多数情况下,我会为每个视图使用 Strongly Typed Views 和单独的 View Models。

【讨论】:

【参考方案2】:

与使用 ViewData 相比,更好的方法是创建一个新的 Model 对象并将其传递给对 Model 进行强类型化的 View。

模型 (Models/MyModels.cs)

public class MyModel

    public string PropertyName  get; set; 

查看(查看/我的/Index.aspx)

<%@ Page Language="C#" Inherits="ViewPage<MyModel>" %>
<p><%=Model.PropertyName %></p>

控制器 (Controllers/MyController.cs)

public class MyController : Controller

    public ActionResult Index()
    
        MyModel model = new MyModel()
        
            PropertyName = "My Property Name"
        ;

        return View(model);
    


Html.Encode 可以这样使用:

<%=Html.Encode(someObject) %>

或者如果你是using ASP.NET 4.0

<%: someObject %>

【讨论】:

我假设您的意思是 &lt;%=model.PropertyName %&gt; 而不是 &lt;%=Model.PropertyName %&gt;【参考方案3】:

Justin 关于 ViewData 的使用以及 View Models 的使用是正确的(这绝对是最适合您需求的解决方案)。

Session 是另一种选择,但它往往是一个滑坡,但您确实要求提供替代方案。

【讨论】:

【参考方案4】:

ViewData 适用于您不确定自己需要什么的完整随机数据。

如果您正在构建定义明确的视图,您将希望使用强类型视图。这些让您的视图继承自特定的业务对象(或者,更有用的是,一个 ViewModel)来显示数据。在这种情况下,您可以访问强类型模型成员,即 Model.SomeProperty,而不是 ViewData["SomeProperty"]。

此外,Html.Encode 旨在用于重复用户输入数据的数据元素。这是为了防止 HTML 注入。

【讨论】:

以上是关于ViewData 的替代品?的主要内容,如果未能解决你的问题,请参考以下文章

XCTAssertEqualObjects 的替代品是啥?

arcmap在mac上的替代品

$.browser 的替代品是啥

在经过认证的航空平台上有 Qt 的替代品吗?

UIScrollView 的开源替代品

Reflector 的开源替代品? [关闭]