MVC 3 avec formulaires et listes: classeur de modèle par défaut et éditeur pour
-
12-11-2019 - |
Question
Le modèle:
public class MyObject
{
public IList<Entry> Entries;
}
public class Entry
{
public string Name { get; set; }
}
Si j'utilise l'éditeur par défaut pour (modèle=> modèle.entries), les valeurs Nom / ID sont:
<input type="text" value="" name="Entries[0].Name" id="Entries_0__Name">
Si, au lieu de cela, je veux créer un modèle d'éditeur pour celui-ci:
<%@ 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>
Les valeurs de nom / ID émises sont:
<input type="text" value="" name="Entries.[0].Name" id="Entries__0__Name">
Le nom a donc une période entre le nom de la propriété et [0] et l'ID a un soulignement supplémentaire à gauche du numéro d'index.Cela ne fonctionne pas avec le classeur de modèle par défaut.Y a-t-il un moyen de faire cela qui fonctionne avec le classeur de modèle par défaut?
La solution
Je pense que vous pouvez faire la majeure partie de cela à l'aide de modèles sans avoir à goûter explicitement sur la liste, ce qui semble causer vos problèmes avec le classeur de modèle.
Essayez de faire ces modèles d'éditeur partagés:
Modèle d'éditeur MyObject
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.MyObject>" %>
<div class="list">
<%: Html.EditorFor(m => m.Entries) %>
</div>
Modèle d'éditeur d'entrée
<%@ 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>
La seule chose que je n'ai pas encore compris, c'est comment obtenir la valeur correcte dans l'attribut ID de la DIV, d'où les points d'interrogation.La mise en garde finale est que je suis à la maison, donc je n'ai pas vraiment essayé cela.