Asp.net-Core-2.0

如何從 Core 2 RazorPage ViewModel 處理程序返回 PartialView

  • March 20, 2019

在 Asp.Net MVC 中,您可以通過執行以下操作輕鬆返回局部視圖:

return PartialView("ModelName", Model);

這是如何在 RazorPage ViewModel 處理程序上完成的?

我想通了。它不像在 MVC 中那樣直接。您必須創建一個空ViewDataDictionary()模型,然後將其 Model 屬性設置為部分填充模型。

查看模型/處理程序

public async Task<IActionResult> OnGetAsyncUpdateSearchResults(DateTime startDate, DateTime endDate, string selectedTypes)
{
   int[] types = selectedTypes.Split(",").Select(x => int.Parse(x)).ToArray();

   var inventory = await _itemService.GetFiltered(types, null, null, null, null, null, null, startDate, endDate.ToUniversalTime(), null, null, null, null, null, null, null);

   if (inventory != null)
   {
       SearchResultsGridPartialModel = new SearchResultsGridPartialModel();
       SearchResultsGridPartialModel.TotalCount = inventory.TotalCount;
       SearchResultsGridPartialModel.TotalPages = inventory.TotalPages;
       SearchResultsGridPartialModel.PageNumber = inventory.PageNumber;
       SearchResultsGridPartialModel.Items = inventory.Items;
   }

   var myViewData = new ViewDataDictionary(new Microsoft.AspNetCore.Mvc.ModelBinding.EmptyModelMetadataProvider(), new Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary()) { { "SearchResultsGridPartialModel", SearchResultsGridPartialModel } };
   myViewData.Model = SearchResultsGridPartialModel;

   PartialViewResult result = new PartialViewResult()
   {
       ViewName = "SearchResultsGridPartial",
       ViewData = myViewData,
   };

   return result;
}

我現在可以通過 ajax GET 呼叫這個處理程序並讓它返回部分的 HTML。然後我可以div按預期設置部分和部分刷新。

這是我正在進行的 AJAX 呼叫:

var jsonData = { "startDate": startDate, "endDate": endDate, "selectedTypes": selectedTypesAsString };

$.ajax({
   type: 'GET',
   url: "searchresults/?handler=AsyncUpdateSearchResults",
   beforeSend: function (xhr) {
       xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val());
   },
   contentType: 'application/json; charset=utf-8"',
   data: jsonData,
   success: function (result) {
       $("#searchResultsGrid").html(result);
   },
   error: function (error) {
       console.log(error);
   }
});

引用自:https://stackoverflow.com/questions/49177092