ViewData的替代品?

时间:2011-01-10 17:58:20

标签: asp.net-mvc views controller server-side viewdata

我对MVC,ASP.net以及一般的服务器端脚本都很陌生。

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

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

CONTROLLER:ViewData["PropertyName"] = value;

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

这是正确用途吗?

更好的方法是做什么,而不是使用ViewData,有什么不好呢?

4 个答案:

答案 0 :(得分:3)

有很多视图情况我会主张使用ViewData集合。

在大多数情况下,我会为每个视图使用Strongly Typed Views个人View Models

答案 1 :(得分:1)

不是使用ViewData,更好的方法是创建一个新的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 %>

答案 2 :(得分:1)

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

Session是另一种选择,但它往往是一个滑坡,但你确实要求替代。

答案 3 :(得分:0)

ViewData适用于您无法确定需要的完整随机数据。

如果您正在构建定义明确的视图,则需要使用强类型视图。这些允许您的视图继承自特定业务对象(或更有用的是ViewModel)以显示数据。在这种情况下,您可以访问强类型模型成员,即Model.SomeProperty,而不是ViewData [“SomeProperty”]。

此外,Html.Encode旨在放置重复用户输入数据的数据元素。它旨在防止HTML注入。