2010-01-18 10 views
20

Ich habe eine HtmlHelper-Erweiterung, die derzeit eine Zeichenfolge mit einem String Builder und eine angemessene Menge an komplexer Logik zurückgibt. Ich möchte jetzt etwas extra, um es hinzuzufügen, die von einem Teil Anruf genommen machen, so etwas wie dieses ...ASP.NET MVC Verwenden von Render teilweise aus einem Html-Helper

public static string MyHelper(this HtmlHelper helper) 
{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Append("Hi There"); 
    builder.Append(RenderPartial("MyPartialView")); 
    builder.Append("Bye!"); 
    return builder.ToString(); 
} 

Jetzt natürlich RenderPartial macht direkt auf die Antwort so dass diese doesn; t Arbeit und ich habe habe verschiedene Lösungen ausprobiert, um Partials zu Strings zu rendern, aber alle scheinen über einen zu fallen. Ich benutze den HtmlHelper innerhalb dieses Partials.

Ist das möglich?

Antwort

67

Da diese Frage, obwohl alt und markiert beantwortet, in Google aufgetaucht ist, werde ich eine andere Antwort geben.

In asp.net mvc 2 und 3 gibt es eine Html.Partial (...) Methode, die wie RenderPartial funktioniert, aber die Teilansicht als String zurückgibt, anstatt sie direkt zu rendern.

Ihr Beispiel wird so:

//using System.Web.Mvc.Html; 
public static string MyHelper(this HtmlHelper helper) 
{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Append("Hi There"); 
    builder.Append(helper.Partial("MyPartialView")); 
    builder.Append("Bye!"); 
    return builder.ToString(); 
} 
+2

Vielen Dank. In Wirklichkeit sollte dies als die richtige Antwort markiert werden. – Amrit

+11

Funktioniert perfekt, ich möchte diese Zeile markieren: 'using System.Web.Mvc.Html'. –

+0

Vielen Dank, Arbeitete wie Charme :) –

-2

Sie sollten keine Teilziffern von einem Helfer aufrufen. Helfer "helfen" Ihren Ansichten und nicht viel mehr. Schauen Sie sich die RenderAction-Methode von MVCContrib (wenn Sie es jetzt brauchen) oder (wenn Sie noch ein paar Monate warten können). Sie könnten Ihr Modell an eine Standard-Controller-Aktion übergeben und ein Teilergebnis zurück erhalten.

+0

+1 ja, ich würde nicht eine teilweise von einem Helfer machen möchten. – griegs

+0

In einigen Fällen ja (wahrscheinlich einschließlich dieser), aber ich versuche, meinen HTML-Code in HTML-Dateien zu behalten, wo es möglich ist, und HTML-Helfer zu verwenden, um die Logik zu kombinieren. Auf diese Weise bekomme ich immer noch nette Editor-Funktionen in meinem HTML. Allerdings ist das Verwenden von Render Partial genau das, was ich in diesem Fall getan habe. –

+0

nicht sicher, dass die Frage beantwortet .... – nixon

Verwandte Themen