如何在布局中使用 Razor Partial Tag Helper
How to Use Razor Partial Tag Helper in a Layout
查看旧的 Razor 应用程序后,我决定更新它,但无法让部分标签助手工作,我升级到 Visual Studio(社区)2019,因为我可以从那里找到所有信息,并制作了一个新的 ASP.NET Core 5.0 Razor 项目,该项目实际上包含一个 Pages 文件夹。
现在尝试使用使用部分的布局后,出现以下错误:
InvalidOperationException: 传入 ViewDataDictionary 的模型项的类型为 'WebApplication1.Pages.IndexModel',但此 ViewDataDictionary 实例需要类型为 'WebApplication1.Pages.Shared.PartAModel' 的模型项。
请告诉我我遗漏了什么简单的事情使这项工作成功。
结果应该只有 3-5 个文件,所以我将在这里举例说明:
Index.cshtml:
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<div class="text-center">
<p>
This is the parent content.
</p>
</div>
_Layout.cshtml:
<!DOCTYPE html>
<html lang="en">
<body>
<div>
@RenderBody()
</div>
<div>
<partial name="PartA" />
</div>
</body>
</html>
PartA.cshtml:
@page
@model WebApplication1.Pages.Shared.PartAModel
@{
}
This is where the child content goes.
Index.cshtml.cs:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace WebApplication1.Pages
{
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
public void OnGet()
{
}
}
}
PartA.cshtml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApplication1.Pages.Shared
{
public class PartAModel : PageModel
{
public void OnGet()
{
}
}
}
PartA.cshtml
页面与 WebApplication1.Pages.Shared.PartAModel
强绑定。
您需要通过部分标签传递相同的模型:
@{var part = new PartAModel;}
<div>
<partial name="PartA" model="@part" />
</div>
另见:
查看旧的 Razor 应用程序后,我决定更新它,但无法让部分标签助手工作,我升级到 Visual Studio(社区)2019,因为我可以从那里找到所有信息,并制作了一个新的 ASP.NET Core 5.0 Razor 项目,该项目实际上包含一个 Pages 文件夹。
现在尝试使用使用部分的布局后,出现以下错误:
InvalidOperationException: 传入 ViewDataDictionary 的模型项的类型为 'WebApplication1.Pages.IndexModel',但此 ViewDataDictionary 实例需要类型为 'WebApplication1.Pages.Shared.PartAModel' 的模型项。
请告诉我我遗漏了什么简单的事情使这项工作成功。
结果应该只有 3-5 个文件,所以我将在这里举例说明:
Index.cshtml:
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<div class="text-center">
<p>
This is the parent content.
</p>
</div>
_Layout.cshtml:
<!DOCTYPE html>
<html lang="en">
<body>
<div>
@RenderBody()
</div>
<div>
<partial name="PartA" />
</div>
</body>
</html>
PartA.cshtml:
@page
@model WebApplication1.Pages.Shared.PartAModel
@{
}
This is where the child content goes.
Index.cshtml.cs:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace WebApplication1.Pages
{
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
public void OnGet()
{
}
}
}
PartA.cshtml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApplication1.Pages.Shared
{
public class PartAModel : PageModel
{
public void OnGet()
{
}
}
}
PartA.cshtml
页面与 WebApplication1.Pages.Shared.PartAModel
强绑定。
您需要通过部分标签传递相同的模型:
@{var part = new PartAModel;}
<div>
<partial name="PartA" model="@part" />
</div>
另见: