67 votes

asp mvc partial avec model et ViewDataDictionary - comment puis-je accéder à ViewDataDictionary?

Je suis entrain de créer un formulaire qui met à jour les deux modèles, pour cet exemple, un Projet avec une collection de Tâches, je veux le contrôleur d'accepter un Projet unique qui a sa Tâche de collecte chargé à partir du formulaire de saisie. J'ai ce travail, essentiellement le code ci-dessous sans une partielle.

Cela peut paraître idiot, mais je ne peux pas comprendre comment accéder au compteur (i) de l'partielle?

Modèle

public class Project
{
    public string Name { get; set; }
    public List<Task> Tasks { get; set; }
}

public class Task
{
    public string Name { get; set; }
    public DateTime DueDate { get; set; }
}

Créer.cshtml (point de Vue)

@model MyWebApp.Models.Project

@using(Html.BeginForm("Create", "Project", FormMethod.Post, new { id = "project-form" }))
{
    <div>
        @Html.TextBox("Name", Model.Name)
    </div>

    @for(int i = 0; i < Model.Tasks.Count; i++)
    {
        @Html.Partial("_TaskForm", Model.Tasks[i], new ViewDataDictionary<int>(i))
    }

}

_TaskForm.cshtml (vue partielle)

@model MyWebApp.Models.Task

<div>
    @Html.TextBox(String.Format("Tasks[{0}].Name", 0), Model.Name)
</div
<div>
    @Html.TextBox(String.Format("Tasks[{0}].DueDate", 0), Model.DueDate)
</div

NOTEZ la Chaîne.Format ci-dessus, je suis coder en dur 0, je veux utiliser le ViewDataDictionary paramètre qui est lié à la variable i à partir de l'appel de la Vue

Merci, - Jesse

136voto

house9 Points 9240

Je suppose que j'ai posté trop tôt. Ce fil avait la réponse que je cherchais

asp.net MVC RC1 RenderPartial ViewDataDictionary

J'ai fini par utiliser cette syntaxe succincte

 @Html.Partial("_TaskForm", Model.Tasks[i], new ViewDataDictionary { {"counter", i} } )
 

Puis en vue partielle

 @model MyWebApp.Models.Task
@{
    int index = Convert.ToInt32(ViewData["counter"]);
}

<div>
    @Html.TextBox(String.Format("Tasks[{0}].Name", index), Model.Name)
</div>
<div>
    @Html.TextBox(String.Format("Tasks[{0}].DueDate", index), Model.DueDate)
</div>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X