如何将变量传递给视图中的多个部分视图?我的想法是每个局部视图将构成一个表单中的不同字段,并且我计划在每个局部视图中使用动态创建的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范式?
答案 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)