Я думаю о переходе с .net core mvc на бритвенные страницы , поэтому я создаю демонстрационное приложение, где я пробую функции из mvc, которые я использовал, и немного застрял, когда я попытка перезагрузить некоторую часть страницы на основе AJAX-запроса, используя частичное представление. Иногда частичное представление очень простое, как в следующем примере, а иногда очень сложное (оно может содержать дополнительные вложенные частичные представления с формами и т. Д., Что удивительно хорошо работает).
Моя CustomersModel: обработчик PageModel выглядит как
- он возвращает JsonResult, потому что мне нужны отзывы об ошибках
- иногда я возвращаю более одного частичного представления
public JsonResult OnGetCustomerDetailPartialView(int id)
{
PopulateCustomers();
var model = new PartialViews.CustomerDetailViewModel()
{
Customer = Customers.Where(x => x.Id == id).FirstOrDefault()
};
var partialView = PartialViewHelper.PartialView("/PartialViews/CustomerDetailViewModel.cs", model, ViewData, TempData);
return new JsonResult(new { success = true, html = partialView.ToStringExtension() });
}
Помощник по частичному просмотру
public static class PartialViewHelper
{
public static PartialViewResult PartialView(string viewName, object model,
ViewDataDictionary viewData, ITempDataDictionary tempData)
{
viewData.Model = model; <-- this line throws error
return new PartialViewResult()
{
ViewName = viewName,
ViewData = viewData,
TempData = tempData
};
}
}
и проблема в том, что я получил ошибку
System.InvalidOperationException: 'Элемент модели передан в
ViewDataDictionary имеет тип
'RazorPages.PartialViews.CustomerDetailViewModel', но это
Экземпляр ViewDataDictionary требует элемент модели типа
'RazorPages.Pages.CustomersModel'. '
То есть ViewData привязан к CustomerModel, можно ли вернуть частичное представление определенного ViewModel?
Суть вопроса в том, стоит ли мне использовать Razor Pages вместо MVC или они предназначены для менее сложных проектов, чем MVC?