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);
}
});
それを理解してくれたTechFisherに感謝します。これは少しわかりやすい例です。
public IActionResult OnGetTestPartial()
{
return new PartialViewResult()
{
ViewName = "Test",
ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
{
Model = new TestPartialData { Data = "inputhere" },
}
};
}
上記のクラスと同じフォルダにある「Test.cshtml」というファイル名の部分ビュー。
@using YourNamespace
@model TestPartialData
<div>Hello, model value: @Model.Data</div>
Jqueryで非同期に読み込みます
$("#someHtmlElementId").load("Your/Path/TestPartial");