Domanda

Ci sono state molte discussioni su View-engine per ASP.NET MVC e alcune critiche contro l'inline " tag-soup " con for-loop e cose simili.

L'alternativa o il complemento è stato quello di utilizzare gli helper HTML, che sono solo chiamate di metodo incorporate.

Quando guardo all'interno degli helper HTML di ASP.NET MVC oggi usano una classe chiamata TagBuilder .

La mia proposta è di utilizzare LINQ to XML per ottenere HTML (X) fortemente tipizzato e formattato correttamente :

XDocument output = new XDocument();
XElement root = new XElement("div",
    new XAttribute("class", "root_item"));

XElement iconImage = new XElement("img",
    new XAttribute("src", ResolveUrl("~/image.gif")),
    new XAttribute("alt", "This is an image"));

XElement link = new XElement("a",
    new XAttribute("class", "link"),
    new XAttribute("href", "http://google.com"),
    new XText("Link to Google"));


root.Add(link);
root.Add(iconImage);
output.Add(root);

Mi piace perché è come i controlli fortemente tipizzati in WebForms, in cui è possibile rinnovare un pulsante e aggiungerlo alla raccolta Control di un altro controllo.

Ci sono problemi o limitazioni evidenti in questo?

È stato utile?

Soluzione

Posso pensare a due problemi con il metodo sopra menzionato. Innanzitutto,

XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));

Facendo riferimento a ciò che scrivi sopra, possiamo avere qualcosa del tipo:

<img src=<%=whatever%> alt=<%=whatever%> />

Questo potrebbe essere un giudizio personale o cosa, ma certamente voterò il successivo più " umano " leggibile. Bene, l'uso di LINQ 2 XML potrebbe eliminare lo strano & Lt;%}% & Gt; che vagando nelle mie pagine aspx, ma allo stesso tempo, fai quei " bravi ragazzi " sembra goffo.

Il secondo potrebbe venire con un problema di prestazioni. Penso che l'analisi e l'esecuzione di LINQ 2 XML potrebbe essere piuttosto lenta, anche se non ho dati al riguardo.

Personalmente sto ancora sperimentando il framework MVC, mi sembra di tornare ai vecchi tempi come ASP o PHP 3.X, poiché quasi tutte le parti interattive vengono gestite in modo esplicito, invece che ASP Dot Net orientato alla finestra / GUI-OOP Struttura. Penso che il motivo principale per cui userò MVC è che può garantire i migliori codici HTML lato client ..

Altri suggerimenti

Questa è un'ottima idea! L'unico problema che vedo con esso è l'uso di C #. ;) VB.NET ha un supporto molto migliore per la produzione di XML tramite la sua funzione letterale XML.

Il codice che elenchi nella tua domanda potrebbe essere scritto in questo modo in VB.NET. (Con l'aggiunta del testo & Quot; Questo è un link & Quot; poiché il tuo esempio non conteneva alcun testo all'interno dell'elemento a.)

Dim root = <div class="root_item">
               <img src=<%= ResolveUrl("~/image.gif") %> alt="This is an image"/>
               <a class="link" href="http://google.com">This is a link</a>
           </div>

Ci sono ancora <%= ... %> tag, ma vengono verificati per validità al momento della compilazione. Se questo codice è stato reso il valore restituito di una funzione che ha restituito il tipo XElement, quel frammento Xhtml potrebbe essere riutilizzato altrove nel sito.

Ho un progetto su CodePlex che utilizza VB.NET XML Literals come un motore di visualizzazione MVC ASP.NET personalizzato all'indirizzo http: //vbmvc.codeplex.com . Si basa sul codice di Dmitry Robsman , che è Product Unit Manager per ASP.NET presso Microsoft. Le viste sono classi VB.NET e le pagine mastro sono classi di base. Devi rinnovare le classi della vista parziale invece di farle riferimento da una stringa di nome, quindi è anche un ulteriore controllo del tempo di compilazione. Invece della classe HtmlHelper, che restituisce stringhe, esiste una classe XhtmlHelper che restituisce XElement e funziona in modo simile a quello che hai proposto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top