我对MVC,ASP.net以及一般的服务器端脚本都很陌生。
我正在观看www.asp.net/mvc上的教程视频,其中该人正在解释模板。他解释说控制器使用viewdata将信息发送到视图。
如果我错了,请纠正我,但我相信它是这样使用的:
CONTROLLER:ViewData["PropertyName"] = value;
查看:<p><%= ViewData["PropertyName"] %></p>
这是正确用途吗?
更好的方法是做什么,而不是使用ViewData,有什么不好呢?
答案 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注入。