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#-这是用于重新加载局部视图的处理程序
JSONResult
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
如何修复
有几种方法可以解决这个问题
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);
返回有效载荷;
}
GET
public PartialViewResult OnPostReloadCompaniesInAreaList([FormBody]List<CompanyInSearchAreaViewModel> companyInSearchAreaViewModels)
{
...
}
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
如何修复
有几种方法可以解决这个问题
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)
},
});