2015-09-01 25 views
11

Ich bin ein großer Fan von Fortschritt und Änderungen. Es ist für mich klar, dass das ASP.NET MVC-Team eines der wertvollsten Features von Webseiten (@helper) getötet hat, egal was irgendjemand denkt. Wenn Sie etwas entfernen müssen, ersetzen Sie es bitte durch etwas, das in Funktionalität und Verwendung identisch ist. Bisher glaube ich nicht ViewComponent löst das auch nicht TagHelper. Gibt es einen Ersatz dafür? Etwas, das Parameter übernimmt und einen HtmlString zurückgibt.Ersatz für @helper in ASP.NET 5/asp.net mvc 6

Kein Nuget-Paket überall?

Manche Leute nennen das eine gute Verbesserung. Ich setze mich dieser Meinung vollständig und stark aus.

nicht, daß ich etwas schädlich mit sehen:

@helper foo(string something){ 
    <div>Say @something</div> 
} 

var emailbody = classfilenameinAppCodefolder.foo("hello"); //store result in a variable for further processes 

Was auf der Erde würden Sie eine solche wertvolle Funktion machen löschen? Was in aller Welt kannst du damit ersetzen?

Für jetzt glaube ich, es ist ein vorübergehendes Löschen vor RC. https://github.com/aspnet/Razor/issues/281 und https://github.com/aspnet/Mvc/issues/1130 Gut !!! es sollte besser sein. Ich hoffe, dass jemand daran arbeitet. Ohne @helper wäre der Aufbau einer großen HtmlString oder "Vorlage" ein ernster Schmerz.

Hinweis: Teilansicht scheint nicht den Trick zu tun. Ich denke, es ist nur rendert Ansichten nicht Ansicht zurück zur variablen

Zweitens, was den Ordner App_Code passierte?

+0

Was ist falsch mit 'ViewComponent'?Es kann auch einen 'HtmlString' zurückgeben, wenn das Ihr Problem ist. – Dealdiane

+0

ViewComponent ist ähnlich wie partialView, aber leistungsfähiger. Die Frage ist, kann ich das HTML-Ergebnis dieser Komponente in einer Variablen für weitere Manipulation innerhalb meiner Logik speichern. Ich bin nicht daran interessiert, aus einer Ansicht in einen Ausschnitt einer Ansicht zu rendern. Ich interessiere mich dafür, eine Ansicht on the fly zu erzeugen und es in einer Variable in einer vereinfachten Weise wie @helper zu speichern. ViewComponent für alle, die ich sehe, sieht zu aufwendig aus. –

Antwort

2

Die @helper Direktive was removed da es unvollständig war und sein aktuelles Design nicht in den neuen "ASP.NET 5 Way" passte. Einer der Gründe ist, dass Helfer im Ordner während ASP.NET 5 has no concept of special folders deklariert werden sollten. Daher entschied das Team, das Feature vorübergehend zu entfernen.

Es gibt Pläne, es in der Zukunft zurück zu bringen. Siehe this und this.

+2

Nun ... es ist sehr klar, dass ich in naher Zukunft nichts mit ASP.NET 5 zu tun haben werde. Ich bleibe lieber bei 4 oder migriere bei Bedarf zu node.js. Ich kann seine Richtung bis jetzt nicht garantieren. Es sieht wie eine neue Lernkurve für mich aus. Ich habe die Zeit Jungs .... zu viel, um diese Tage zu lernen –

5
@{ 
    Func<String, IHtmlContent> foo = @<div>Say @item</div>; 
} 
+0

Hier ist ein Zusammenhang zu dieser Idee: https://github.com/aspnet/Razor/issues/715#issuecomment-198456302 –

+0

Wie man es ohne verwendet Parameter? (z. B. Func ... funktioniert nicht) – Netstep

1

Ich möchte @ Alexaku Antwort erweitern und zeigen, wie ich eine Helfer ähnliche Funktion implementiert habe. Es ist nur auf einer bestimmten Seite nützlich, aber Sie können einen Rasierklingen-Code mehrmals mit Eingabeparametern ausführen. Die Syntax ist nicht großartig, aber ich fand es sehr nützlich in Abwesenheit der @helper Funktion des Rasiermessers. Deklarieren Sie zuerst eine Art von Dto, die die Eingabeparameter in die Funktion enthält.

@functions { 
    private class Dto 
    { 
     public string Data { get;set; } 
    } 
} 

Dann deklarieren Sie die Rasiererfunktion. Beachten Sie, dass der Wert von displayItem mehrzeilig sein kann. Beachten Sie auch, dass Sie mit dem @item auf die Dto-Variable zugreifen.

Wenn Sie dann die Rasierklingen-Vorlage verwenden möchten, können Sie sie wie folgt von überall auf der Seite aufrufen.

<div> 
    @displayItem(new Dto {Data = "testingData1" }); 
</div> 
<div> 
    @displayItem(new Dto {Data = "testingData2" }); 
</div> 
Verwandte Themen