2011-02-01 2 views
50

Я создаю форму, которая обновляет две связанные модели, для этого примера проект с коллекцией задач, я хочу, чтобы контроллер принял один проект, у которого есть коллекция задач, загруженная из ввода формы. У меня есть эта работа, по существу ниже код без частичного.asp 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; } 
} 

Create.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 

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

ответ

103

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

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> 
Смежные вопросы