【发布时间】:2019-04-14 16:05:40
【问题描述】:
我考虑从 .net core mvc 迁移到 razor pages,所以我正在构建演示应用程序,在其中尝试使用 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 更简单的项目?
【问题讨论】: