【发布时间】:2020-05-31 07:18:47
【问题描述】:
我想要以下工作流程:
- Ajax 调用页面模型处理程序以触发数据库和创建一些视图模型并将结果返回为
JSONResult - 将第 1 步的结果传回给另一个处理程序以重新加载局部视图
在第 1 步和第 2 步之间,有一些使用 JS 处理的数据。但这超出了范围,因为数据只被读取而不被更改。
第 1 步工作正常。但第 2 步没有。这是一个简短的代码示例:
第 1 步: 阿贾克斯:
var searchArea = parseFloat(document.getElementById('txtSearchArea').value);
var latitude = parseFloat(document.getElementById('hiddenLat').value);
var longitude = parseFloat(document.getElementById('hiddenLong').value);
var requestData = JSON.stringify({'latitude': latitude, 'longitude': longitude, 'searchArea': searchArea});
$.ajax({
type: "POST",
url: '@Request.Scheme://@Request.Host@Request.Path?handler=GetCompaniesWithinSearchArea',
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
contentType: "application/json; charset=utf-8",
dataType: "json",
data: requestData
}).fail(function (x) {
alert('Error fetching companies in search area.');
}).done(function (result) {
reloadSearchResultPartialView(result);
});
C#:
public async Task<JsonResult> OnPostGetCompaniesWithinSearchAreaAsync([FromBody] LatitudeLongitudeSearchArea latitudeLongitudeSearchArea)
{
var latitude = latitudeLongitudeSearchArea.Latitude;
var longitude = latitudeLongitudeSearchArea.Longitude;
var searchArea = latitudeLongitudeSearchArea.SearchArea;
var idsOfcompaniesInArea = await _companiesService.GetIdsOfCompaniesWithinSearchAreaAsync(latitude, longitude, searchArea));
var companyInSearchAreaVMs = await _companiesInSearchAreaViewModelFactory.Create(idsOfcompaniesInArea);
return new JsonResult(companyInSearchAreaVMs);
}
_companiesInSearchAreaViewModelFactory.Create 返回List<CompanyInSearchAreaViewModel>。
第 2 步:
通常我使用 javascript load(...) 方法来调用局部视图的重新加载。
所以我再次尝试使用这种方法。
JS:
function reloadSearchResultPartialView(searchResult) {
$('#divSearchResult').load('@Request.Scheme://@Request.Host@Request.Path?handler=ReloadCompaniesInAreaList&companyInSearchAreaViewModels=' + searchResult);
}
其中 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;
}
调用了重新加载局部视图的处理程序,但视图模型列表始终是一个空列表。
希望有人能指出我正确的方向。
提前致谢!
【问题讨论】:
标签: c# ajax asp.net-core razor-pages