确定ajaxpost中的模型类型

确定ajaxpost中的模型类型,ajax,asp.net-mvc,asp.net-mvc-4,asp.net-ajax,Ajax,Asp.net Mvc,Asp.net Mvc 4,Asp.net Ajax,我有一个ASP.NET MVC视图。在我看来,我想发出一个AJAX Post请求来更新视图中的PartialView 这是我的模型: public class HomeListViewModel { public MainQueryViewModel MainQuery { get; set; } // other properties } 这是我的观点(有部分观点): 如果我将参数类型更改为:MainQuery,则它可以正常工作: [HttpPost] [ValidateA

我有一个ASP.NET MVC视图。在我看来,我想发出一个AJAX Post请求来更新视图中的PartialView

这是我的模型:

public class HomeListViewModel
{
    public MainQueryViewModel MainQuery { get; set; }

    // other properties
}
这是我的观点(有部分观点):

如果我将参数类型更改为:
MainQuery
,则它可以正常工作:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult List(MainQuery MainQuery)
{
    var myModel = MainQuery;    // <-- all ok

    // some action
}
[HttpPost]
[ValidateAntiForgeryToken]
公共操作结果列表(MainQuery MainQuery)
{

var myModel=MainQuery;//您使用的
Html.Partial()
正在生成具有
name
属性的表单控件,这些属性与
MainQueryViewModel
相关,而不是
HomeListViewModel

首选的方法是使用
编辑器模板
,它将为
名称
属性添加前缀,以便获得
name=“MainQuery.someProperty”
,而不是当前获得的
name=“someProperty”

将分部的名称更改为
MainQueryViewModel.cshtml
(以匹配类的名称),并将其移动到
/Views/Shared/EditorTemplates
(或
/Views/yourControllerName/EditorTemplates
)文件夹中,并生成html使用

@Html.EditorFor(m => m.MainQuery)
添加前缀的另一个选项是使用
additionalViewData

@Html.Partial("_MainQuery", Model.MainQuery, 
new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "MainQuery" }})
有关将其简化为
@Html.PartialFor(m=>m.MainQuery,“\u MainQuery”)
的扩展方法,请参阅

@Html.EditorFor(m => m.MainQuery)
@Html.Partial("_MainQuery", Model.MainQuery, 
new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "MainQuery" }})