Ich habe eine benutzerdefinierte Implementierung eines Blocks, der ähnlich wie Html.BeginForm()
funktioniert. Die Implementierung ist im Wesentlichen wie folgt:
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:
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?
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%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%Tags und Links asp.net-mvc-3 c# razor idisposable html.beginform