Asp.Net MVC 2 parti riutilizzabili?
-
21-09-2019 - |
Domanda
Mi chiedo, c'è un equivalente dei componenti monorotaia View per Asp.Net MVC?
Quello che sto cercando di fare è di rendere alcuni complessa interfaccia utente che dipende da una classe, in modo da dire che siamo in una visualizzazione elenco, voglio passare un oggetto a questo ViewComponent equivalente e che ci vorrà l'oggetto come parametro e rendere il complesso UI per me che mi permette di fare altre cose nella vista. Quale sarebbe il modo migliore per farlo in Asp.Net MVC?
Dal momento che questo è un complesso UI io preferirei di scrivere una volta, quindi, i modelli non sono in realtà il modo in cui mi piacerebbe andare, come vorrà dire I ll hanno problemi di manutenibilità.
Alcune opzioni che ho visto (e io m in procinto di iniziare a provare) sono:
- Html.RenderAction in futures
- subcontroller
Comunque mi piacerebbe sapere se c'è qualcos'altro o se uno è meglio dell'altro per questo particolare scenario
Altri suggerimenti
Che dire RenderPartial? Che sembra andare bene il disegno di legge.
<% Html.RenderPartial("MyPartialView", Model.Data); %>
Si prega di dare un'occhiata a DisplayTemplates nonché EditorTemplates in anteprima MVC 2.
O forse si vuole Templated Helpers ?
MvcContrib InputBuilder ha qualcosa di simile.
Anche se si può solo scrivere il proprio:
public static string RenderInput(this HtmlHelper html, object data, string prefix)
{
foreach (var prop in data.GetType().GetProperties())
{
object val = prop.GetValue(data, new object[0]);
string name = prefix + prop.Name;
switch (prop.PropertyType.Name)
{
case "String": html.TextBox(name, val); break;
case "Guid": html.Hidden(name, val); break;
default: html.RenderInput(val, name + "."); break;
}
}
}
Avviso ricorsione. Naturalmente si dovrà aggiungere il supporto collezioni, ecc ... interruttore all'interno (PropertyType) ... ma questo non è così difficile. Si può anche verificare la presenza di UIHint sulla proprietà per rendere parziali. Un sacco di possibilità e tutto sotto il vostro controllo; -)