12
votes

Begincollectionnitem imbriqué

J'utilise l'approche de BegincollectionItem de Steve Sanderson pour ajouter du contenu dynamique. Tout fonctionne bien quand je le fais au premier niveau. Cependant, lorsque vous essayez de mettre en œuvre une collection imbriquée signifiant un bégincol3lectionItem dans un autre Begincollectionntem, il ne semble pas fonctionner.

Mes modèles sont les suivants: P>

@using prj.Helpers 
@model prj.Models.Model.Transfer
...

<div class="editTransferRow">
//using (Html.BeginCollectionItem("transfers"))
@using (Html.BeginCollectionItem("tt.transfers"))
{
...

<div class="editor-label">
    @Html.LabelFor(m => m.swift)<req>*</req>      
</div>

<div class="editor-field">
    @Html.TextBoxFor(m => m.swift, new { @class = "t_swift" })
</div>

...

<div class="editor-label">
    @Html.LabelFor(m => m.transfer_amount)<req>*</req>      
</div>

<div class="editor-field">
    @Html.TextBoxFor(m => m.transfer_amount, new { @class = "t_transfer_amount" })
</div>

...
}

</div>


2 commentaires

Pouvez-vous à poster votre solution s'il vous plaît?


Ce lien est mauvais. Chaque lien que j'ai trouvé cela supposément montre que la solution a été détournée. Il semble que cela semble.


3 Réponses :


17
votes

Pour obtenir le préfixe avec un html.begincollectionitem code>, vous pouvez accéder à visionnementdata.templateinfo.htmlfieldprefix code> (J'utilise le package Nuget). Vous êtes sur la bonne voie avec TT.Transfers code>, mais vous avez besoin du préfixe spécifique à la place.

au lieu de juste p> xxx avant

vous " ll au besoin du préfixe du paiement actuel_method aussi. P>

@using (Html.BeginCollectionItem(ViewData.TemplateInfo.HtmlFieldPrefix + ".tt.transfers"))


4 commentaires

"ViewData.TemplateInfo.htmlfieldprefix" vient toujours vide. Quelle référence de package Nuget à ajouter pour obtenir le bon HTMLFieldPrefix?


Je ne suis pas sûr de ce que le Jonk voulait dire en utilisant le paquet Nuget car sans aucun paquet d'addition (autre que le Begincollectionitem) "viewdata.templateinfo.htmlfieldprefix" fonctionne pour moi


Si vous obtenez vide "ViewData.Templateinfo.htmlfieldprefix" Vérifiez ma réponse ci-dessous


Viewdata.templateinfo.htmlfieldprefix est toujours null pour moi aussi.



3
votes

Je ne pouvais pas adapter correctement la méthode de Emploi Stevens avec MVC 5. J'utilise simplement la classe d'extension de Job Stevens avec nom BegincollectionItem2 xxx pré>

ci-dessous: p>

<tr>
    @using (Html.BeginCollectionItem2("ParameterList"))
    {

        <td>@Html.TextBoxFor(m => m.ParameterName, new { @class = "form-control" })</td>
        <td>
            @Html.TextBoxFor(m => m.Unit, new { @class = "form-control" })
        </td>                                                
    }</tr>


0 commentaires

1
votes

Vous pouvez utiliser le code de Jonk Réponse, mais il ne fonctionnera pas pour des partiels ajoutés de manière dynamique des appels AJAX car "ViewData.TemplateInfo.htmlfieldPrefix" est vide.

La solution consiste à ajouter une propriété à votre modèle avec le formulaire Préfixe et remplissez-le sur l'action appelée par la fonction AJAX. p>

récupérer le préfixe de formulaire à l'aide de jQuery, vous pouvez simplement faire: p>

// "this" a button that will trigger the ajax call and is within the div with the class "partial-enclosing-class"
var parentRow = $(this).parents('.partial-enclosing-class');
var hiddenInput = parentRow.find('input[name$="].Id"]');
var formPrefix = hiddenInput.prop('name').replace(".Id", "");


0 commentaires