2010-03-09 35 views
4
<body> 
<div id="header"> 
<div class="title">SPORTS STORE</div> 
</div> 
<div id="categories"> 
<% Html.RenderAction("Menu", "Nav"); %> 
</div> 
<div id="content"> 
<asp:ContentPlaceHolder ID="MainContent" runat="server" /> 
</div> 
</body> 

這是Steven Sandersons的書「Pro ASP.NET MVC Framework」的示例代碼。如何使用Controller和Action在asp.net mvc 2中渲染部分視圖?

此代碼適用於MVC V1和MvcContrib。它做了什麼,它呈現了「Nav:Controller」的「Menu()」視圖。由於ASP.NET MVC V2包含Partial()和RenderPartial()功能,因此我試圖實現它,但此代碼不起作用。我試圖修改它在幾個方面,但似乎沒有呈現局部視圖,以作爲參數過載功能: 1)控制器的名字 2)查看名稱

我敢肯定,我不是第一人誰在以這種方式實現RenderAction(),所以必須有一種解決方法。請幫忙。

回答

4

我發現了這個問題。我總是刪除{controller}/{action}路線並使用小寫REST類似URL來定製我的所有路線。但是對於Html.RenderAction,有必要有這樣的一般路由。我將這條通用路線添加到我的路線列表末尾,並且工作正常。 - 馬赫迪2月22日在14:42

雖然我還是不明白,這是如何工作,爲什麼吸盤路線nessesary,什麼是路線的約束。也許我會在稍後做一些研究。

+0

這是因爲RenderAction與通過路由最初映射控制器動作時發生的情況更爲接近。我同意如果一個人不能暴露路線,但仍然有RenderAction的工作將會很好。與此同時,您只能公開該特定路由,將[ChildActionOnly]放在這些操作上,並且不會有默認路由。正如你所暗示的,在路由約束下,你可以減少路由的存在對你的可用「路由命名空間」(大多數情況下不是問題,而是部分CMS的站點的一個重要考慮因素)的影響。 – Cymen 2010-03-26 18:06:56

1

RenderAction在MVC2中(docs here)。這聽起來像你已經改變了你的代碼來使用RenderPartial而不是完全不同。將其改回使用RenderAction,你應該沒問題。如果你的版本中沒有它,也許你需要更新到最新的測試版?

+0

嗨tvanfosson, 感謝您的回覆。 我之前嘗試過RenderAction,它會拋出一個異常,如「在rotes表中找不到可變路徑」。添加任何額外的rotes似乎不合理,因爲我沒有使用route:Controller和View被調用Direclty,對吧? 謝謝,伊利亞。 – 2010-03-09 14:02:53

+0

RenderAction有一個簽名,按照該順序採取操作和控制器。你的代碼看起來是正確的 - 你有最新的MVC2測試版嗎?是否有可能與MVCContrib庫存在衝突 - 我應該從你的項目中刪除它。 – tvanfosson 2010-03-09 14:13:00

+0

我沒有提及MVCContlib。我也肯定會有最新版本的MVC,它包含在MS VS 2010 RC Ultimate中。更多信息將在幾個小時內提供。 謝謝你這樣的快速回復,tvanfosson。 – 2010-03-09 14:43:46