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.
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:
und dann:
%Vor%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:
Getestet mit ASP.Net MVC 4
Tags und Links asp.net-mvc-3 html-helper