АСП в MVC частичный модель и экземпляр класса viewdatadictionary - каким образом я могу получить экземпляр класса viewdatadictionary?


Я создаю форму, которая обновляет две связанные модели, например проект с коллекцией задач, я хочу, чтобы контроллер принял один проект, который имеет свою коллекцию задач, загруженную из ввода формы. У меня это работает, по существу ниже код без частичного.

Это может показаться глупым, но я не могу понять, как получить доступ к счетчику (i) из частичного?

модель

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

создать.cshtml (Вид)

@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 (частичный вид)

@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

обратите внимание на строку.Формат выше я жестко кодирую 0, я хочу использовать параметр ViewDataDictionary, который привязан к переменной i из вызывающего представления

1   51   2011-02-01 19:28:01

1 ответ:

думаю, я написал слишком рано. У этой темы был ответ, который я искал

asp.net MVC RC1 RenderPartial ViewDataDictionary

в итоге я использовал этот краткий синтаксис

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

тогда в частичном виде

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