MVC 3 con moduli ed elenchi: Binder e editore del modello predefinito
-
12-11-2019 - |
Domanda
Il modello:
public class MyObject
{
public IList<Entry> Entries;
}
public class Entry
{
public string Name { get; set; }
}
Se utilizzo l'editor per predefinito (modello => model.entries) i valori Nome/ID sono:
<input type="text" value="" name="Entries[0].Name" id="Entries_0__Name">
Se invece voglio creare un modello editorfor come questo:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<CMS.Models.MyObject>>" %>
<div class="list">
<%
for (int i = 0; i < Model.Count; i++)
{ %>
<div class="object" id="<%: i %>">
<%: Html.EditorFor(model => Model[i]) %>
<%: Html.ValidationMessageFor(model => Model[i]) %>
</div>
<% } %>
</div>
I valori di nome/ID emessi sono:
<input type="text" value="" name="Entries.[0].Name" id="Entries__0__Name">
Quindi il nome ha un periodo tra il nome della proprietà e [0] e l'ID ha un sottolineatura extra a sinistra del numero dell'indice. Questo non funziona con il legante del modello predefinito. C'è un modo per farlo che funziona con il legante del modello predefinito?
Soluzione
Penso che tu possa fare la maggior parte di questo usando i modelli senza dover iterare esplicitamente nell'elenco, il che sembra causare i tuoi problemi con il legante del modello.
Prova a realizzare questi modelli di editor condivisi:
Modello editoriale myObject
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.MyObject>" %>
<div class="list">
<%: Html.EditorFor(m => m.Entries) %>
</div>
Modello di redazione di entrata
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.Entry>" %>
<div class="object" id="<%: ??? %>">
<%: Html.EditorFor(m => m.Name) %>
<%: Html.ValidationMessageFor(m => m.Name) %>
</div>
L'unica cosa che non ho ancora capito è come ottenere il valore corretto nell'attributo ID del div, quindi i punti interrogativi. L'avvertenza finale è che sono a casa, quindi in realtà non ci ho provato.