2010-07-20 3 views
0

Ok, j'ai une page maître que je possède une ascx ...rendu les différences entre Html.RenderPartial et <% @ s'inscrire

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

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

Le ascx a un plan du site qui utilise le 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>   

Tout fonctionne bien et je devais passer le modèle dans la commande donc changé la page maître

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

Maintenant, je reçois une erreur d'exécution "Control '2_headerMenu" de type "Menu" doit être placé à l'intérieur d'un tag de formulaire avec runat = server. " et Oui j'ai un tag Form avec runat = server dans la page master.

Par conséquent, quelqu'un connaît-il les différences de rendu entre ces deux approches ou tout autre pointeur? Merci d'avance.

+0

Je doute vraiment, que vous devriez mélanger les contrôles d'asp (menu, sitemap) avec MVC. S'il vous plaît coonsider changer tous ces contrôles à asp.net MVC. Cela rendra le code beaucoup plus propre et vos problèmes moins. – cRichter

Répondre

0

Essayez de ne pas utiliser le chemin relatif, mais juste le nom de la vue partielle

html.RenderPartial("Header", Model); 

Maintenant, un autre point important est de préciser quel type d'objet que vous utilisez dans votre vue partielle. La première ligne doit être:

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

Remplacez OBJECT-TYPE par le type d'objet.

0

Je ne pensais pas que MVC trouverait automatiquement le ascx dans ce répertoire le fera-t-il?

Oui assez sûr le contrôle est correctement configuré et charges OK jusqu'à ce qu'il essaie de rendre le asp: Menu

0

Le problème comme l'un commentor noté est que vous mélangez un contrôle WebForm dans une vue MVC. Comme l'erreur que vous recevez des états, le menu doit être dans la hiérarchie de contrôle enfant d'un contrôle <form runat="server"/>. Les assistants MVC tels que Html.RenderPartial ne font rien avec l'arbre de contrôle. Idéalement, vous ne devriez pas mélanger les contrôles MVC et WebForms. Cela peut fonctionner dans certaines situations mais échoue dans d'autres.

0

J'ai le même problème! juste posté une question comme ça! À mon avis la page rendue partielle n'est pas au courant de la page parente et c'est pourquoi vous obtenez un int au lieu de l'adresse de la page parente!

Si vous souhaitez générer un client statique, vous pouvez utiliser cette fonctionnalité dans .NET 4! Il sera plus facile de coder votre code JavaScript en sachant que la valeur ne changera pas!

Questions connexes