0

Quelqu'un sait comment vous pouvez appeler un équivalent fonctionnel à Html.EditorFor() à partir du contrôleur?L'équivalent de code pour Html.EditorFor()

J'ai une table standard dans ma vue. Les lignes utilisent un EditorTemplate

<table id="tableOfBar"> 
    <tfoot> 
     <tr><td colspan="2">Some paging controls and whatnot</td></tr> 
    </tfoot> 
    <tbody> 
     <% for (int i=0;i<Model.Rows.Count();i++) 
      { 
       int j = i; 
     %><%: Html.EditorFor(m => m.Rows[j], "FooRowTemplate", "Rows["+j+"]", new { OtherViewDataStuff})%> 
    </tbody> 
</table> 

Le modèle d'éditeur est une vue partielle fortement typé qui renvoie les <tr> et éléments enfants. Tout fonctionne correctement, mais l'étape suivante consiste à ajouter un bouton "Ajouter une ligne". Pour un tas de raisons qui sont hors de portée ici, je veux frapper le serveur plutôt qu'une solution purement côté client. Ce que j'essaye de faire est de retourner le EditorTemplate en tant que vue partielle et avoir JavaScript prendre ce Html retourné et l'ajouter à la table.

[HttpPost] 
public ActionResult AddRow(FooModel model) 
{ 
    var row = new FooRowModel(); 
    model.AddRow(row); 
    var index = model.Rows.IndexOf(row); 
    return PartialView("~/Areas/MyArea/Views/Shared/EditorTemplates/FooRowTemplate.ascx", model.Rows[index]); 
} 

Tout cela fonctionne bien, SAUF le nom d'entrée. La partie qui manque est le contenu du préfixe de collection qui indique au Model Binder comment réassembler le modèle lors de la publication. Du côté de la vue, vous pouvez spécifier ce que cela devrait être (c'est la partie "Rows["+j+"]" de l'appel EditorFor() ci-dessus).

Pouvez-vous donner à un affichage partiel un préfixe de nom de champ html comme avec EditorFor()? Des idées sur la façon de faire ce travail? Toute mon approche peut être totalement fausse, c'est bien. Juste dis moi pourquoi. :)

Merci pour votre aide.

Répondre

1

Je vous recommande de lire le following blog post qui explique en détail comment réaliser ce que vous cherchez.