2009-01-30 121 views
20

我想通過一個ViewData對象從母版頁到視圖用戶控件使用ViewDataDictionaryasp.net MVC RC1 RenderPartial ViewDataDictionary

問題是ViewDataDictionary無論以何種方式嘗試,都不會在視圖用戶控件中返回任何值。

下面的示例代碼使用匿名對象僅用於演示,雖然此方法或傳遞ViewData對象都不起作用。

以下爲RenderPartial輔助方法,我試圖使用方法:

<% Html.RenderPartial("/Views/Project/Projects.ascx", ViewData.Eval("Projects"), new ViewDataDictionary(new { Test = "Mark" })); %> 

在我看來,用戶控制我執行以下操作:

<%= Html.Encode(ViewData["Test"]) %> 

爲什麼會出現這種不返回任何東西?

感謝您的幫助。

編輯:

我能夠通過,並沒有任何問題訪問強類型的模型。這是我想要使用傳遞ViewDataDictionary說只是模型之外的單個值...

回答

5

你試過:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData); %> 

也有你驗證計算機[「測試」]是在傳遞它之前在ViewData中?另請注意,將ViewData傳遞給部分控件時,保持模型的重要性是相同的。

尼克

+0

謝謝,但我能夠通過模型沒有任何問題。這是ViewDataDictionary,我試圖用來通過說只是在模型之外的單個值.. – Mark79 2009-01-30 13:09:09

1

在你的主觀點:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData["Projects"]); %> 

無論是在您的控制器或你的主要觀點:

ViewData["Test"] = "Mark"; 

如果不指定一個模型或視圖數據字典RenderPartail,它使用來自包含視圖的那些。

5

我使用ASP.Net MVC的RTM版本,但有:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", new ViewDataDictionary(new {Key = "Some value"})); %> 

嘗試在你的局部視圖參考值時,以下幾點:

<%= ViewData.Eval("Key") %> 

,似乎有爲我做了詭計。它也將工作,如果你只是這樣做:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", new {Key = "Some value"}); %> 

希望這會有所幫助。

10

不知道是否有人仍然在意,但我使用了ViewDataDictionary的KeyValuePair。

<% Html.RenderPartial("ItemRow", item, new ViewDataDictionary{ 
     new KeyValuePair<string, object>("url", url), 
     new KeyValuePair<string, object>("count", count), 
     new KeyValuePair<string, object>("className", className) 
}); %> 

這樣你可以在一個語句中寫入所有內容。該KVPs可以在視圖通過訪問:

<%= ViewData["url"] %> 
<%= ViewData["count"] %> 
<%= ViewData["className"] %> 

而我通過模型通過可通過模型來訪問*

33

這是我見過這樣做最巧妙的方法:

<% Html.RenderPartial("/Views/Project/Projects.ascx", Model, new ViewDataDictionary{{"key","value"}});%> 

它可能有點冒失,但它讓你通過AND發送一些額外的數據。

+0

謝謝!有用! – 2011-08-05 18:01:57