visual studio net mvc framework asp asp.net-mvc

asp.net-mvc - studio - mvc asp.net c#



asp mvc partial con modelo y ViewDataDictionary: ¿cómo accedo a ViewDataDictionary? (1)

Supongo que publiqué demasiado pronto. Este hilo tenía la respuesta que estaba buscando

asp.net MVC RC1 RenderPartial ViewDataDictionary

Terminé usando esta sintaxis escueta

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

Luego en vista parcial

@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>

Estoy creando un formulario que actualiza dos modelos relacionados, para este ejemplo un proyecto con una colección de tareas, quiero que el controlador acepte un solo proyecto que tenga su colección de tareas cargada desde la entrada del formulario. Tengo este funcionamiento, esencialmente el siguiente código sin un parcial.

Esto puede sonar tonto, pero no puedo entender cómo acceder al contador (i) desde el parcial.

Modelo

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; } }

Create.cshtml (Ver)

@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 (vista parcial)

@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

NOTA el String.Format anterior estoy codificando 0, quiero usar el parámetro ViewDataDictionary que está vinculado a la variable i de la vista que llama