2010-07-20 68 views
0

好的,我有一個主網頁,其中我包括ASCX ...渲染html.RenderPartial之間的差異和<%@寄存器

<%@ register tagname="header" tagprefix="vb" src="~/Views/Controls/Header/Header.ascx" %> 

<vb:header id="pageHeader" runat="server" /> 

的ASCX具有使用MvcSiteMapProvider一個網站地圖...

<asp:SiteMapDataSource id="SiteMapDataSource1" sitemapprovider="Secure" showstartingnode="false" runat="server" /> 
<asp:menu id="headerMenu" DataSourceID="siteMap" orientation="Horizontal" staticenabledefaultpopoutimage="false" runat="server" IncludeStyleBlock="false"></asp:menu>   

一切都很好地工作,然後我需要的模型傳遞到控制,改變了母版頁

html.RenderPartial("~/Views/Controls/Header/Header.ascx", Model) 

現在我得到一個運行時錯誤「類型'Menu'的Control'2_headerMenu'必須放置在runat = server的表單標籤內。」是的,我在母版頁中有一個帶runat = server的Form標籤。

因此,有沒有人知道這兩種方法或任何其他指針之間的渲染差異? 在此先感謝。

+0

我真的懷疑,你應該將asp控件(菜單,站點地圖)與MVC混合使用。請將所有這些控件改爲asp.net MVC。這將使代碼更清潔,減少問題。 – cRichter 2010-07-20 13:30:12

回答

0

儘量不使用局部視圖

html.RenderPartial("Header", Model); 

的相對路徑,但只是名字現在,另一個重要的一點是指定使用在你的部分觀點是什麼樣的對象。第一行應該是:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<OBJECT-TYPE>" %> 

用對象類型替換OBJECT-TYPE。

0

沒有想到MVC會自動在那個目錄下找到ascx嗎?

是非常確定的控制設置正確,並加載OK,直到它試圖使ASP:菜單

0

如指出一個評註的問題是,你是混合在MVC視圖一個WebForm控制。由於您收到錯誤狀態,菜單必須位於控件的子控件層次結構中。 MVC助手(例如Html.RenderPartial)不會對控制樹執行任何操作。理想情況下,你不應該混用MVC和WebForms控件。它可以在某些情況下工作,但在其他情況下失敗。

0

我有同樣的麻煩!剛剛發佈了一個這樣的問題!在我看來,部分渲染頁面並不知道父頁面,這就是爲什麼你得到一個int而不是父頁面的地址!

如果你想產生一個Static ClientID,你可以在.NET 4中使用這個特性!知道值不會改變的情況下編寫JavaScript代碼會更容易!

相關問題