Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.14.130.13] |
|
Сообщ.
#1
,
|
|
|
Всем привет.
Может кто то пояснить как работают частичные представления на уровне Razor классов наследуемых от PageModel ? Вот допустим есть у меня частичное представление _CatIdInfoPartial: @model CatWebApi.Models.CatId @using Microsoft.AspNetCore.Mvc.Localization @inject IViewLocalizer Localizer @{ Layout = null; } <div id="@Model.Id" class="tabcontent bg-light box-shadow container border"> <div class="container box-shadow" style="max-height:92%;min-height:30%; overflow:auto"> <table class="table table-striped" style="border-collapse:separate"> <thead class="thead-dark"> <tr style="color:antiquewhite"> <th>Cat Id</th> <th>Cat Family</th> <th>Cat Model</th> <th>Cat Location</th> </tr> </thead> <tbody> @for (int idx = 0; idx < 2; ++idx) { <tr> <td>@Model.Id</td> <td>@Model.Family</td> <td>@Model.Model</td> <td>@Model.Location</td> </tr> } </tbody> </table> </div> </div> Дальше есть у меня класс обработчик, вызывается он через ajax запрос: [ValidateAntiForgeryToken] public class IndexModel : PageModel { //! Вот этот обработчик вызывается когда я нажимаю на кнопку определенную на веб форме. public PartialViewResult OnPostSelectCat(string catId) { CatId cat = null; foreach (var item in Cats) { if (item.Id == catId) { cat = item; break; } } return Partial("_CatIdInfoPartial", cat); //! Вот примерно в этом месте летит исключение } } И почему то при вызове этого обработчика летит исключение типа: fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] An unhandled exception has occurred while executing the request. System.InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'CatWebApi.Models.CatId', but this ViewDataDictionary instance requires a model item of type 'CatWebApi.Pages.IndexModel'. at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible(Object value) at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.SetModel(Object value) at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.set_Model(Object value) at Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Partial(String viewName, Object model) Ничего не понимаю. Если вызывать в самом html файле что то типа @{await Html.RenderPartialAsync("_CatIdInfoPartial", cat);} то все работает, а если через метод класса, то летит вот такое исключение. Притом что если передать ему то, что он просит в качестве модели, то будет лететь ровно такая же ошибка, но будет он просить уже то, что ему реально нужно передать. Может быть есть кто в курсе как с этим работать? |
Сообщ.
#2
,
|
|
|
Кажется я понял как это делать.
Нашел решение вот тут: http://qaru.site/questions/7163065/how-to-...1432%2349183026 Для моего случая метод-обработчик, который возвращает частичное представление будет выглядеть вот так: public IActionResult OnGetCatIdInfo(string catId) { var Cat = new CatId() { Id = catId, Family = "CatFamily Selected", Model = "CatModel Selected", Location = "CatLocation Selected" }; var myViewData = new Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary(new Microsoft.AspNetCore.Mvc.ModelBinding.EmptyModelMetadataProvider(), new Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary()) { { "_CatIdInfoPartial", Cat } }; myViewData.Model = Cat; PartialViewResult result = new PartialViewResult() { ViewName = "_CatIdInfoPartial", ViewData = myViewData, }; return result; } Результат сразу можно передать в какой нибудь div как html. Что то типа: $.ajax({ url: '/Index?handler=CatIdInfo&catId=' + catId, type: 'GET', contentType: "application/json", success: function (cat) { document.getElementById('catInfoContent').innerHTML = cat; }, ... |