Razor: benutzerdefiniertes BeginForm () - wie Razor Einweg-Block funktioniert in einigen Fällen nicht

8

Ich habe eine benutzerdefinierte Implementierung eines Blocks, der ähnlich wie Html.BeginForm() funktioniert. Die Implementierung ist im Wesentlichen wie folgt:

%Vor%

Dann kann ich meiner Meinung nach tun:

%Vor%

Um zu bekommen:

%Vor%

Das alles funktioniert gut. Ich gerate jedoch in Schwierigkeiten, wenn ich meinen Block in einem "Rasierschnipsel" benutze, z. G. wenn man etwas Rasierklingen-Inhalt an eine Funktion weitergibt, die ein Func<object, HelperResult> als Argument nimmt. Zum Beispiel habe ich eine andere HtmlHelper-Funktion wie folgt definiert:

%Vor%

Wenn ich Folgendes tue, wird der innere Inhalt jedoch ohne den äußeren Inhalt gerendert:

%Vor%

Ich denke, das Problem ist, dass "Html" immer noch auf den HtmlHelper des äußeren Kontextes verweist und somit BEGIN und END an einen anderen Schreiber als "einige Inhalte 2" gesendet werden, aber ich bin mir nicht sicher, ob dies der Fall ist der Fall.

Weiß jemand (1), was schief läuft und (2) wie ich es beheben kann?

    
ChaseMedallion 02.01.2013, 22:01
quelle

2 Antworten

2

Eine Teillösung Ihres Problems besteht darin, die WriteTo-Methode von HelperResult aufzurufen. Sie können die Inhaltsmethode wie folgt ändern:

%Vor%

und dann benutze es so:

%Vor%

BEARBEITEN

Wenn Sie Wert als IHtmlString oder eine andere Zeichenfolge zurückgeben möchten, können Sie dies tun:

%Vor%     
Sławomir Rosiek 10.01.2013 19:34
quelle
0

Das beunruhigt mich schon seit einiger Zeit. Es ist ein Rasierklingen-Fehler wegen MyBlock und der HtmlHelper mit verschiedenen Writern. Eine sinnvolle Lösung besteht darin, den __razor_template_writer von HtlmHelper in MyBlock zu übergeben. (Hoffentlich wird das in vnext behoben)

%Vor%     
graham mendick 01.09.2014 19:43
quelle