asp mvc partial with model和ViewDataDictionary - 如何访问ViewDataDictionary?

时间:2011-02-01 16:28:01

标签: asp.net-mvc

我正在创建一个更新两个相关模型的表单,对于这个示例,一个带有一组Tasks的Project,我希望控制器接受一个Project,它从表单输入加载了Task集合。我有这个工作,基本上是下面的代码没有部分。

这可能听起来很傻但我无法弄清楚如何从部分访问计数器(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参数,该参数绑定到来自调用View的变量i

1 个答案:

答案 0 :(得分:124)

猜猜我发布的太快了。这个帖子有我正在寻找的答案

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>