2015-09-01 8 views
11

Sono un grande fan del progresso e dei cambiamenti. È chiaro per me che il team MVC di ASP.NET ha ucciso una delle funzionalità più preziose delle pagine Web (@helper) indipendentemente da ciò che qualcuno pensa. Se è necessario rimuovere qualcosa, si prega di sostituirlo con qualcosa di simile a funzionalità e utilizzo. Finora, non credo che ViewComponent risolva che neanche lo fa TagHelper. C'è qualche sostituzione a questo? Qualcosa che prende i parametri e restituisce uno HtmlString.Sostituzione per @helper in ASP.NET 5/asp.net mvc 6

Nessun pacchetto Nuget da nessuna parte?

Alcune persone chiamano questo un buon miglioramento. Sono completamente e fermamente rimandare a questa opinione.

Non vedo nulla nocivi con:

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

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

Cosa diavolo farebbe si elimina un elemento così prezioso? Con cosa puoi sostituirlo?

Per ora credo sia una cancellazione temporanea prima di RC. https://github.com/aspnet/Razor/issues/281 e https://github.com/aspnet/Mvc/issues/1130 Bene !!! è meglio. Spero che qualcuno ci stia lavorando. Senza @helper, la creazione di HtmlString o 'modello' di grandi dimensioni sarebbe un grave problema.

Nota: Vista parziale non sembra fare il trucco. Penso che solo rende parere non tornare al fine di variabile

In secondo luogo, cosa è successo alla cartella App_Code?

+0

Cosa c'è di sbagliato in 'ViewComponent'?Può restituire un 'HtmlString' anche se questo è il tuo problema. – Dealdiane

+0

ViewComponent è simile a partialView ma più potente. La domanda è, posso memorizzare il risultato html di questo componente in una variabile per un'ulteriore manipolazione all'interno della mia logica. Non mi interessa il rendering in una sezione di una vista da una vista. Sono interessato a generare una vista al volo e memorizzarla in una variabile in un modo più semplice come @helper. ViewComponent per tutto quello che posso vedere sembra troppo elaborato. –

risposta

2

La direttiva @helperwas removed poiché era incompleta e il suo design corrente non si adattava al nuovo 'ASP.NET 5 way'. Uno dei motivi è che gli helper devono essere dichiarati nella cartella App_Code mentre ASP.NET 5 has no concept of special folders. Pertanto il team ha deciso di rimuovere temporaneamente la funzionalità.

Ci sono piani per riportarlo in futuro. Vedi this e this.

+2

Beh .... è molto chiaro che non avrò più nulla a che fare con ASP.NET 5 in qualsiasi momento. Preferisco attenermi a 4 o migrare a node.js se necessario. Non posso garantire la sua direzione finora. Sembra una nuova curva di apprendimento per me. Non ho quel tempo ragazzi .... Troppo da imparare in questi giorni –

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

Ecco alcuni contesti a questa idea: https://github.com/aspnet/Razor/issues/715#issuecomment-198456302 –

+0

Come usarlo senza parametri? (ad esempio Func ... non funziona) – Netstep

1

Mi piacerebbe espandere la risposta di @ Alexaku e mostrare come ho implementato una funzione di supporto. È utile solo su una pagina specifica ma ti consente di eseguire più volte un codice di rasoio con i parametri di input. La sintassi non è eccezionale, ma l'ho trovato molto utile in assenza della funzione @helper del rasoio. Prima dichiarare una sorta di Dto che conterrà i parametri di input nella funzione.

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

Quindi dichiarare la funzione rasoio. Notare che il valore displayItem può essere multilinea e notare anche che si accede alla variabile Dto usando @item.

@{ 
    Func<Dto, IHtmlContent> displayItem = @<span>@item.Data</span>; 
} 

Poi, quando si desidera utilizzare il modello di rasoio si può chiamare come il seguente da qualsiasi punto della pagina.

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