Supponiamo che io sono un modello semplice per spiegare lo scopo:EditorFor IEnumerable <T> con TemplateName
public class Category
{
...
public IEnumerable<Product> Products { get; set; }
}
Vista:
@model Category
...
<ul>
@Html.EditorFor(m => m.Products)
</ul>
EditorTemplate:
@model Product
...
<li>
@Html.EditorFor(m => m.Name)
</li>
Nota che non lo faccio devi definire l'EditorTemplate per IEnumerable<Product>
, posso solo crearlo per ilIl modelloe il framework MVC sono abbastanza intelligenti da utilizzare il proprio modello per IEnumerable. Esso scorre la mia collezione e chiama il mio EditorTemplate.
L'html output sarà simile a questo
...
<li>
<input id="Products_i_Name" name="Products[i].Name" type="text" value="SomeName">
</li>
cui posso inviare al mio controller, dopo tutto.
Ma perché MVC non risolve il problema quando definisco EditorTemplate con un nome di modello?
@Html.EditorFor(m => m.Products, "ProductTemplate")
In questo caso devo cambiare il tipo di proprietà per IList<Product>
, scorrere l'insieme da me e chiamare l'EditorTemplate
@for (int i = 0; i < Model.Products.Count; i++)
{
@Html.EditorFor(m => m.Products[i], "ProductTemplate")
}
che sembra tipo di soluzione sporco per me. C'è qualche altra soluzione più pulita per fare questo?
possibile duplicato di [modo idiomatico corretto utilizzare Editor modelli personalizzati con modelli IEnumerable in ASP.NET MVC] (http://stackoverflow.com/questions/25333332/correct-idiomatic-way-to-use -custom-editor-templates-with-ienumerable-models-in) – GSerg
Non sono sicuro di come ho perso questa domanda durante la ricerca prima di creare [quella domanda] (http://stackoverflow.com/questions/25333332/correct-idiomatic-way- to-use-custom-editor-templates-with-ienumerable-models-in) dei miei. Cronologicamente la mia domanda dovrebbe essere chiusa come duplicato di questa, ma credo che dovrebbe essere il contrario, perché dopo tutto c'è una soluzione. – GSerg
@GSerg, grazie per aver condiviso la tua risposta. Non posso dire che mi piacciono le soluzioni alternative suggerite meglio di un semplice ciclo 'for' attraverso la collezione. Ci scusiamo per non essere chiari con la mia domanda, ma non stavo cercando le soluzioni alternative a questo problema, ma per il pulito e (speravo) l'unico modo giusto per realizzare questo. Ecco perché non posso dire che le risposte alla tua domanda abbiano risolto il mio problema, anche se le domande stesse sono molto simili. – Zabavsky