C# 如何使用动态加载的表单元素进行MVC模型绑定

C# 如何使用动态加载的表单元素进行MVC模型绑定,c#,asp.net-mvc-3,model-binding,C#,Asp.net Mvc 3,Model Binding,假设我有一个这样的视图模型 class MyView { DynamicViewModel MyDynamicViewModel {get; set;} } class DynamicViewModel { string A {get; set;}; } 在实际视图标记上,我加载MyView。我有一个DynamicViewModel的EditorTemple部分视图,因为我希望它是可重用的,而且它本身也有一些动态元素 此外,MyView页面有自己的表单元素,用于确定MyDy

假设我有一个这样的视图模型

class MyView
{
    DynamicViewModel MyDynamicViewModel {get; set;}
}

class DynamicViewModel 
{
    string A {get; set;};
}
在实际视图标记上,我加载MyView。我有一个DynamicViewModel的EditorTemple部分视图,因为我希望它是可重用的,而且它本身也有一些动态元素

此外,MyView页面有自己的表单元素,用于确定MyDynamicViewModel的内容。因此,根据用户键入/单击的内容,MyDynamicViewModel将通过ajax回调重新加载新信息

这是可行的,但由于DynamicViewModel是动态加载的,MVC模型绑定器无法知道DynamicViewModel中的值是否属于MyView.MyDynamicViewModel上的模型

举例来说,MyDynamicViewModel.A的表单值的表单ID将等于“A”。但要建模绑定,我需要它是MyDynamicViewModel.A,如下所示:

<input id="MyDynamicViewModel.A" name="MyDynamicViewModel.A" type="text"> 


但是这个模板是通过ajax加载的(controller方法以字符串形式返回视图,javascript只是用内容更新一个div),它不知道“所有者”模型MyView的情况,我在理解您的问题时遇到了一些困难,无法完整地看到代码

根据我的理解,在从Ajax调用中获取html字符串后,您应该能够设置html字符串的
id
name
属性


如果您正在处理更复杂的视图模型,例如带有集合的表单,那么如果您将
MyView
作为模型传递给视图,您应该仍然能够按照设置相应的
id
name
属性

你可以用

@Html.EditorFor(model => Model.MyDynamicViewModel.A)
但是您需要在
MyView
模型的构造函数中将此模型初始化为

  class MyView
    {
     public MyView()
        {
          MyDynamicViewModel =new DynamicViewModel();
        }
        DynamicViewModel MyDynamicViewModel {get; set;}
    }