代码之家  ›  专栏  ›  技术社区  ›  Nigel

ASP MVC:提交具有嵌套用户控件的表单

  •  0
  • Nigel  · 技术社区  · 16 年前

    我对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)...
    

    因为viewdata.viewModel1和viewdata.viewModel2始终为空。有没有方法可以执行自定义绑定?

    最终,我需要表单能够处理动态数量的用户控件,并在不回发的情况下执行异步提交。当我遇到他们时,我会跨过这些桥梁,但我现在已经提到了,所以任何答案都不会排除这个功能。

    非常感谢。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Darin Dimitrov    16 年前

    要使数据绑定工作,您需要为文本字段指定特殊的名称。例如,在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 .