ASP MVC:使用嵌套用户控件提交表单

时间:2010-04-11 13:33:28

标签: asp.net asp.net-mvc

我是ASP MVC的新手,所以请轻松一下:)。

我有一个包含许多用户控件的表单(部分视图,如在System.Web.Mvc.ViewUserControl中),每个控件都有自己的视图模型,其中一些用户控件中有嵌套的用户控件。我打算重用这些用户控件,以便以这种方式使用层次结构构建表单,并将表单传递给包含其中所有用户控件的视图模型的父视图模型。

例如:

Parent Page (with form and ParentViewModel)
  -->ChildControl1 (uses ViewModel1 which is passed from ParentViewModel.ViewModel1 property)
  -->ChildControl2 (uses ViewModel2 which is passed from ParentViewModel.ViewModel2 property)
    -->ChildControl3 (uses ViewModel3 which is passed from ViewModel2.ViewModel3 property)

我希望这是有道理的......

我的问题是如何在提交表单时检索视图数据?看来,视图数​​据无法绑定到ParentViewModel:

public string Save(ParentViewModel viewData)...

as viewData.ViewModel1和viewData.ViewModel2始终为null。有没有办法可以执行自定义绑定?

最终,我需要该表单能够处理动态数量的用户控件并执行异步提交而无需回发。当我来到他们时我会穿过这些桥梁,但我现在提到它,所以任何答案都不会排除这种功能。

非常感谢。

1 个答案:

答案 0 :(得分:1)

要使数据绑定工作,您需要为文本字段指定特殊名称。例如在ChildControl1:

<%= Html.TextBox("ViewModel1.Property1", Model.Property1) %>

这将生成以下标记:

<input type="text" name="ViewModel1.Property1" id="ViewModel1_Property1" value="" />

当您发布以下操作时:

public ActionResult Save(ParentViewModel viewData)
{
    ...
}

它会更新viewData.ViewData1.Property1的值。对于绑定集合,您可以查看this article