将不同参数传递给视图中的多个部分视图

时间:2011-07-12 17:22:14

标签: asp.net-mvc-3

如何将变量传递给视图中的多个部分视图?我的想法是每个局部视图将构成一个表单中的不同字段,并且我计划在每个局部视图中使用动态创建的DOM对象。所以我需要传递3个参数。 ID(用于唯一标识每个DOM对象)及其特定的控制器和操作。我将如何在视图中执行此操作?

例如,我想做一些......

@Html.Partial("_BookField", Model, 1, "book", "updateauthor")

@Html.Partial("_BookField", Model, 2, "book", "updatetitle")

@Html.Partial("_BookField", Model, 3, "book", "updatepublisher")

有没有办法在不在模型中添加其他属性的情况下执行此操作?

编辑:在与我的一位同事商量后,他还提出了一个我想澄清的观点。他建议我正在做的,即在视图中引入控制器/动作逻辑正在打破MVC概念。但是像ActionLinks这样的东西,你必须在动作链接中放入控制器和动作才能使它能够做某事。我正在尝试做什么考虑打破MVC范式?

1 个答案:

答案 0 :(得分:2)

您当然使用视图模型:

public class SubViewModel
{
    public int Id { get; set; }
    public string Book { get; set; }
    public string Author { get; set; }
}

然后让您的主视图模型化此SubViewModel的不同属性:

public class MyMainViewModel
{
    public SubViewModel Sub1 { get; set; }
    public SubViewModel Sub2 { get; set; }
    public SubViewModel Sub3 { get; set; }
}

然后简单地说:

@Html.Partial("_BookField", Model.Sub1)
@Html.Partial("_BookField", Model.Sub2)
@Html.Partial("_BookField", Model.Sub3)

当然,现在控制器的行动责任是填充这些视图模型(一如既往)。如果您使用编辑器/显示模板,您的代码可能更简单,就像这样:

@Html.DisplayFor(x => x.Sub1)
@Html.DisplayFor(x => x.Sub2)
@Html.DisplayFor(x => x.Sub3)

并且因为这对我来说很像一个集合,所以你可以使用一个集合:

public class MyMainViewModel
{
    public SubViewModel[] Subs { get; set; }
}

然后简单地说:

@Html.DisplayFor(x => x.Subs)