2011-01-10 62 views
1

我對MVC,ASP.net以及一般的服務器端腳本都很陌生。ViewData的替代軟件?

我正在看一個教程視頻,網址是www.asp.net/mvc,其中人們正在解釋一個模板。他解釋說,控制器使用viewdata向視圖發送信息。

糾正我,如果我錯了,但我相信它是這樣使用:

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

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

這是正確使用?

什麼是更好的方式來做到這一點,而不是使用ViewData,什麼是壞的?

+0

你應該堅持每個帖子一個問題。我會將「如何使用Html.Encode()」問題提交給另一個問題,因爲它與原始問題無關。 – 2011-01-10 18:05:53

回答

3

有很多觀點的情況,我會主張使用ViewData集合。

對於大多數情況下,我會使用Strongly Typed Views個人View Models爲每個視圖。

1

與使用ViewData相比,更好的方法是創建一個新的Model對象並將其傳遞給強制鍵入到Model中的View。

型號(型號/ MyModels.cs)

public class MyModel 
{ 
    public string PropertyName { get; set; } 
} 

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

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

控制器(控制器/ 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 %> 
+0

我假設你的意思是`<%= model.PropertyName%>`而不是`<%= Model.PropertyName%>`? – DarkLightA 2011-01-11 16:18:46

0

ViewData的是良好的,你是不知道完整的隨機數據你將需要。

如果您正在構建定義明確的視圖,則需要使用強類型視圖。這些讓您的視圖從特定的業務對象(或更有用的ViewModel)繼承來顯示數據。在這種情況下,您可以訪問強類型模型成員,即Model.SomeProperty,而不是ViewData [「SomeProperty」]。

另外,Html.Encode是用來放置重複用戶輸入數據的數據元素。這是爲了防止HTML注入。

1

賈斯廷對於ViewData的使用以及使用視圖模型(這絕對是最符合您需要的解決方案)是正確的。

Session是另一種選擇,但它可能傾向於一個滑坡,但你確實要求替代方案。