C# 无法使用ajax将数据从JSONResult传递回处理程序

C# 无法使用ajax将数据从JSONResult传递回处理程序,c#,ajax,asp.net-core,razor-pages,C#,Ajax,Asp.net Core,Razor Pages,我希望有以下工作流程: Ajax调用页面模型处理程序来触发数据库和一些viewmodels的创建,并将结果返回为JSONResult 将步骤1的结果传递回另一个处理程序,以便重新加载局部视图 在第1步和第2步之间,使用JS进行一些数据处理。但这超出了范围,因为数据只被读取而不被更改 第一步很好。但第二步没有。下面是一个简短的代码示例: 步骤1: 阿贾克斯: C#: 其中searchResult是步骤1的响应结果。数据在步骤1和步骤2之间未更改 C#-这是用于重新加载局部视图的处理程序

我希望有以下工作流程:

  • Ajax调用页面模型处理程序来触发数据库和一些viewmodels的创建,并将结果返回为
    JSONResult
  • 将步骤1的结果传递回另一个处理程序,以便重新加载局部视图
  • 在第1步和第2步之间,使用JS进行一些数据处理。但这超出了范围,因为数据只被读取而不被更改

    第一步很好。但第二步没有。下面是一个简短的代码示例:

    步骤1: 阿贾克斯:

    C#:

    其中searchResult是步骤1的响应结果。数据在步骤1和步骤2之间未更改

    C#-这是用于重新加载局部视图的处理程序

            public PartialViewResult OnGetReloadCompaniesInAreaList(List<CompanyInSearchAreaViewModel> companyInSearchAreaViewModels)
            {
                var result = new PartialViewResult
                {
                    ViewName = "_CompaniesInAreaList",
                    ViewData = new ViewDataDictionary<IList<CompanyInSearchAreaViewModel>>(ViewData, companyInSearchAreaViewModels)
                };
    
                return result;
            }
    
    public PartialViewResult OnGetreload公司内部列表(列出公司搜索区域视图模型)
    {
    var结果=新的PartialViewResult
    {
    ViewName=“\u CompaniesInAreaList”,
    ViewData=新的ViewDataDictionary(ViewData,公司搜索区域ViewModels)
    };
    返回结果;
    }
    
    调用了用于重新加载局部视图的处理程序,但viewmodels列表始终为空列表

    希望有人能给我指出正确的方向

    提前谢谢

    改变这一点:

    function reloadSearchResultPartialView(searchResult) {
       $('#divSearchResult').load('@Request.Scheme://@Request.Host@Request.Path?handler=ReloadCompaniesInAreaList&companyInSearchAreaViewModels=' + searchResult);
    }
    

    在PageModel中

    public PartialViewResult OnGetReloadCompaniesInAreaList(List<CompanyInSearchAreaViewModel> companyInSearchAreaViewModels)
            {
                var result = new PartialViewResult
                {
                    ViewName = "_CompaniesInAreaList",
                    ViewData = new ViewDataDictionary<IList<CompanyInSearchAreaViewModel>>(ViewData, companyInSearchAreaViewModels)
                };
    
                return result;
            }
    
    public PartialViewResult OnGetreload公司内部列表(列出公司搜索区域视图模型)
    {
    var结果=新的PartialViewResult
    {
    ViewName=“\u CompaniesInAreaList”,
    ViewData=新的ViewDataDictionary(ViewData,公司搜索区域ViewModels)
    };
    返回结果;
    }
    

    public PartialViewResult OnGetreload公司内部列表(字符串公司搜索区域视图模型)
    {
    列表数据=JsonConvert.DeserializeObject(companyInSearchAreaViewModels);
    var结果=新的PartialViewResult
    {
    ViewName=“\u CompaniesInAreaList”,
    ViewData=新的ViewDataDictionary(ViewData,数据)
    };
    返回结果;
    }
    
    更改此选项:

    function reloadSearchResultPartialView(searchResult) {
       $('#divSearchResult').load('@Request.Scheme://@Request.Host@Request.Path?handler=ReloadCompaniesInAreaList&companyInSearchAreaViewModels=' + searchResult);
    }
    

    在PageModel中

    public PartialViewResult OnGetReloadCompaniesInAreaList(List<CompanyInSearchAreaViewModel> companyInSearchAreaViewModels)
            {
                var result = new PartialViewResult
                {
                    ViewName = "_CompaniesInAreaList",
                    ViewData = new ViewDataDictionary<IList<CompanyInSearchAreaViewModel>>(ViewData, companyInSearchAreaViewModels)
                };
    
                return result;
            }
    
    public PartialViewResult OnGetreload公司内部列表(列出公司搜索区域视图模型)
    {
    var结果=新的PartialViewResult
    {
    ViewName=“\u CompaniesInAreaList”,
    ViewData=新的ViewDataDictionary(ViewData,公司搜索区域ViewModels)
    };
    返回结果;
    }
    

    public PartialViewResult OnGetreload公司内部列表(字符串公司搜索区域视图模型)
    {
    列表数据=JsonConvert.DeserializeObject(companyInSearchAreaViewModels);
    var结果=新的PartialViewResult
    {
    ViewName=“\u CompaniesInAreaList”,
    ViewData=新的ViewDataDictionary(ViewData,数据)
    };
    返回结果;
    }
    
    为什么会这样 但是viewmodels列表始终是一个空列表

    这是因为您的服务器需要这样的查询字符串:

    handler=ReloadCompaniesInAreaList
    &[0].prop1= 11
    &[0].prop2=12
    ...
    &[1].prop1=21
    &[1].prop2=22
    ...
    
    然而,通过使用

    $('#divSearchResult').load('@Request.Scheme://@Request.Host@Request.Path?handler=ReloadCompaniesInAreaList&companyInSearchAreaViewModels=' + searchResult);
    
    您发送的查询字符串如下所示:

    handler=ReloadCompaniesInAreaList&companyInSearchAreaViewModels=[object
    
    如何修复 有几种方法可以解决这个问题

  • 最简单的方法是将json数组更改为URL编码字符串的形式,例如,更改
    reloadSearchResultPartialView()
    函数,如下所示:

    函数重新加载SearchResultPartialView(searchResult){
    //$('#divSearchResult')。加载('@Request.Scheme://@Request。Host@Request.Path?handler=重新加载公司InRealList&公司InSearchAreaViewModels='+搜索结果);
    $('#divSearchResult').load('@Request.Path?handler=ReloadCompaniesInAreaList',$.param(createFormUrlEncodedPayload(“,searchResult));
    }
    //my helper函数,该函数递归地将普通js obj转换为URL编码字符串形式
    函数createFormUrlEncodedPayload(名称,o){
    var有效载荷={};
    函数objectNotNull(value){返回值!==null&&typeof值====“对象”}
    函数_创建(前缀,obj){
    用于(obj中的var prop){
    if(对象拥有自己的财产(财产)){
    var key=前缀?
    (isNaN(prop)?key=prefix+“+prop:key=prefix+”[“+prop+”]):
    (isNaN(道具)?键=道具:键=“[”+道具+“]”);
    var值=对象[prop];
    if(_objectNotNull(值))
    _创造(关键、价值);
    其他的
    有效载荷[键]=值;
    }
    }
    };
    _创建(名称,o);
    返回有效载荷;
    }
    
  • 或者,您也可以让服务器接收HTTP POST请求,而不是
    GET

    public PartialViewResult OnPostReloadCompaniesInAreaList([FormBody]List<CompanyInSearchAreaViewModel> companyInSearchAreaViewModels) { ... }
  • 为什么会这样 但是viewmodels列表始终是一个空列表

    这是因为您的服务器需要这样的查询字符串:

    handler=ReloadCompaniesInAreaList
    &[0].prop1= 11
    &[0].prop2=12
    ...
    &[1].prop1=21
    &[1].prop2=22
    ...
    
    然而,通过使用

    $('#divSearchResult').load('@Request.Scheme://@Request.Host@Request.Path?handler=ReloadCompaniesInAreaList&companyInSearchAreaViewModels=' + searchResult);
    
    您发送的查询字符串如下所示:

    handler=ReloadCompaniesInAreaList&companyInSearchAreaViewModels=[object
    
    如何修复 有几种方法可以解决这个问题

  • 最简单的方法是将json数组更改为URL编码字符串的形式,例如,更改
    reloadSearchResultPartialView()
    函数,如下所示:

    函数重新加载SearchResultPartialView(searchResult){
    //$('#divSearchResult')。加载('@Request.Scheme://@Request。Host@Request.Path?handler=重新加载公司InRealList&公司InSearchAreaViewModels='+搜索结果);
    $('#divSearchResult').load('@Request.Path?handler=ReloadCompaniesInAreaList',$.param(createFormUrlEncodedPayload(“,searchResult));
    }
    //my helper函数,该函数递归地将普通js obj转换为URL编码字符串形式
    函数createFormUrlEncodedPayload(名称,o){
    var有效载荷={};
    函数objectNotNull(value){返回值!==null&&typeof值====“对象”}
    函数_创建(前缀,obj){
    用于(obj中的var prop){
    if(对象hasOwnProperty(道具)
    
    $.ajax({
       url: '@Request.Path?handler=ReloadCompaniesInAreaList',
       method:'POST',
       contentType:"application/json",
       data: searchResult,
       success: function(resp){
          $('#divSearchResult').html(resp)
       },
    });