Erfassen Sie umschlossenen Inhalt in Einweg-HTML-Helper im BeginForm-Stil

8

Ich versuche, einen HTML-Helfer im BeginForm-Stil zu schreiben, der IDisposable verwendet, um anderen Code zu umbrechen. Ich möchte, dass der Helfer den eingepackten Code nur dann rendert, wenn eine bestimmte Bedingung erfüllt ist (z. B. der Benutzer befindet sich in einer bestimmten Rolle).

Ich dachte, dass ich einfach den context.Writer in der Begin-Methode wechseln und in der Dispose-Methode zurückschalten könnte. Der folgende Code wird kompiliert und ausgeführt, aber der umbrochene Inhalt wird in allen Fällen gerendert. Wenn ich es durchlaufe, wird der umhüllte Inhalt nicht in den neuen StringWriter geschrieben und daher nicht in meiner Kontrolle.

%Vor%

Was versuche ich mit HTML-Helfern zu erreichen?

Ich weiß, dass deklarative HTML-Helfer im Rasierer wahrscheinlich funktionieren würden, aber wenn es möglich wäre, würden sie den Standard-HTML-Helfer-Ansatz bevorzugen, angesichts der app_code-Beschränkung von Rasiermesserhelfern in MVC3.

    
Paul Hiles 04.04.2012, 14:22
quelle

2 Antworten

6

Sie können den Body-Inhalt einer Hilfsmethode, die IDisposable zurückgibt, nicht bedingt rendern. Es wird immer rendern. Sie können diesen Helfertyp verwenden, wenn Sie den Textkörper des Blocks using mit einem benutzerdefinierten Markup umhüllen möchten, wie z. B. der Helfer BeginForm mit dem Element <form> .

Sie können stattdessen eine templated Razor delegate verwenden:

%Vor%

und dann:

%Vor%     
Darin Dimitrov 14.08.2012, 11:39
quelle
9

Sie können Inhalte mit einer BeginForm-ähnlichen Struktur bedingungslos ausblenden. Es beinhaltet nur ein wenig Verwirrung mit dem internen StringBuilder:

%Vor%

Dann müssen Sie nur einen HtmlHelper erstellen, der eine Instanz des obigen Objekts erstellt

%Vor%

Verwendung ist wie folgt:

%Vor%

Vorteile:

  • Schreiben Sie benutzerdefinierte Logik, um Ihren Inhalt anzuzeigen / auszublenden, und übergeben Sie ihn an den Restricted-Konstruktor.
  • Auf
  • öffentliche Eigenschaften in Ihrem eingeschränkten Objekt können Sie im Codeblock Ihrer Ansicht zugreifen, damit Sie dort berechnete Werte wiederverwenden können.

Getestet mit ASP.Net MVC 4

    
Moeri 22.01.2013 18:46
quelle

Tags und Links