Я хотел бы иметь следующий рабочий процесс:
- Ajax вызов обработчика модели страницы для запуска базы данных и создания некоторых моделей представления и возврата результата в виде
JSONResult
- Передайте результат шага 1 другому обработчику, чтобы перезагрузить частичное представление
Между шагами 1 и 2 происходит некоторая обработка данных с использованием JS. Но это выходит за рамки, поскольку данные только читаются и не изменяются.
Шаг 1 работает нормально. Но шаг 2 не делает. Вот краткий пример кода:
Шаг 1: Ajax:
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;
}
Вызывается обработчик для перезагрузки частичного представления, но список моделей представления всегда является пустым списком.
Надеюсь, кто-нибудь подскажет мне правильное направление.
Заранее спасибо!