2009-12-10 8 views
2

ASP .NET MVC 1vues partielles de rendu avec un modèle et HtmlHelper

Je voudrais montrer une base de vue partielle sur un modèle, et je voudrais que d'avoir une commande assez courte pour cela. J'ai donc vu une façon d'utiliser à la fois un HtmlHelper et un contrôleur (et j'utiliserais un autre contrôleur pour cela, pas le contrôleur actuellement utilisé).

Mais d'une manière ou d'une autre, cela donne toujours une erreur, bien que je pense que la méthode commence à ressembler à ce qu'elle devrait être.

Alors qu'est-ce que je fais mal? (Si j'appelle la méthode directement dans la page ASPX, elle réussit, mais il devrait être possible d'utiliser un HtmlHelper pour cela).

public static void RenderPartialView(this HtmlHelper html, string action, string controller, object model) 
{ 
    var context = html.ViewContext; 
    RouteData rd = new RouteData(context.RouteData.Route, context.RouteData.RouteHandler); 
    rd.Values.Add("controller", controller); 
    rd.Values.Add("action", action); 
    rd.Values.Add("model", model); 
    IHttpHandler handler = new MvcHandler(new RequestContext(context.HttpContext, rd)); 
    handler.ProcessRequest(System.Web.HttpContext.Current); 
} 

partie dans la ASCX page:

<% Html.RenderPartialView("Show", "Intro", Model.Intro); %> 

Erreur donnée: 'System.Web.Mvc.HtmlHelper' ne contient pas une définition pour 'RenderPartialView' et aucune méthode d'extension 'RenderPartialView' accepter un premier argument de type 'System.Web.Mvc.HtmlHelper' peut être trouvé (manque-t-il une directive using ou une référence d'assembly?)

Répondre

1

Ajouter

<add namespace="Namespace-Of-RenderPartialView-Class"/> 

à votre fichier web.config.

0

Avec les méthodes d'extension, vous n'avez pas besoin d'inclure le premier argument (le "ce html HtmlHelper"). Cela est géré par le compilateur lors de l'utilisation de méthodes d'extension. Il est déduit en fonction de l'objet sur lequel vous appelez la méthode.

+0

Vous avez raison, mais cela ne fait aucun mal. Même problème quand je laisse cet argument. J'ai ajusté le texte. – Johan

3

Pourquoi n'utilisez-vous pas Html.RenderPartial? C'est la manière correcte de rendre une vue partielle. Pas besoin de faire une autre demande.

<% Html.RenderPartial("Show", Model.Intro); %> 

Votre appel ne réussit pas beacause lorsque vous utilisez une méthode d'extension d'une manière « non statique » (i.e., comme si la méthode appartient à une instance), vous devez omettre le premier paramètre. L'appel correct serait

<% Html.RenderPartialView("Show", "Intro", Model.Intro); %> 

Hope it helps

Cédric

+0

Hmm, je veux avoir une vue partielle d'un autre contrôleur. RenderPartial ne fonctionne que pour le contrôleur actuel, non? – Johan

+0

Merde, je devrais le mettre dans le dossier partagé. Cela fonctionne, merci. – Johan

+0

relative Voir les noms peuvent être utilisés; o) –

Questions connexes