2010-07-20 66 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代码会更容易!

相关问题