gpt4 book ai didi

asp.net-mvc - 为什么扩展 Microsoft.AspNetCore.Mvc.RazorPages.Page 类不适用于布局和局部 View ?

转载 作者:行者123 更新时间:2023-12-04 15:38:34 29 4
gpt4 key购买 nike

我正在尝试扩展 Microsoft.AspNetCore.Mvc.RazorPages.Page在所有 View 中提供额外的功能。扩展Page类和使用 @inherits_ViewImports在 Razor 页面中工作正常,但在 _Layout 中出现错误和部分意见。

我在 _ViewImports 中添加了以下内容:

@inherits WebApplication1.Razor.CustomRazorPage

在哪里:

public abstract class CustomRazorPage : Microsoft.AspNetCore.Mvc.RazorPages.Page
{
public string SayHi(string name)
{
return $"Hi <strong>{name}</strong>";
}
}

但这产生了以下错误:
1>Pages\Shared\_Layout.cshtml(6,13,6,21): error CS0103: The name 'ViewData' does not exist in the current context
1>Pages\Shared\_Layout.cshtml(35,14,35,24): error CS0103: The name 'RenderBody' does not exist in the current context
1>Pages\Shared\_Layout.cshtml(49,7,49,20): error CS0103: The name 'RenderSection' does not exist in the current context

为了解决这个问题,我不得不在 _Layout 的顶部添加以下内容文件:

@inherits Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel>

但是,我仍然面临部分 View 的问题,即使添加显式 @inherits 也无法获得任何成功。对于 RazorPage<TModel>也不是 CustomRazorPage :
Error   CS0103  The name 'Model' does not exist in the current context

我已经在这个 github repo 中添加了示例代码: aspcore-extend-razor-page-issue (检查 index.cshtml)

最佳答案

事实证明,我们应该明确添加 @inherits局部 View 与_Layout相同文件。所以,局部 View _Hello.cshtml应该如下:

@inherits Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel>
@model WebApplication1.Pages.Models.HelloModel

<div class="alert alert-success">Welcome to our Partial View @Model.Name</div>

但是,在这种情况下,我们将无法从 CustomRazorPage 的额外功能中受益。提供。但是,我们可以扩展 RazorPage<TModel>以相同的方式提供与 CustomRazorPage 相同的功能.

我不确定这个问题是否还有另一个克服。但它看起来像 _Layout文件和部分 View 与其他 Razor 页面具有不同的上下文。

更新 11/19/2019

在我之前发布的这个问题中找到了更多细节:
  • https://github.com/aspnet/AspNetCore/issues/17189#issuecomment-555490265
  • 关于asp.net-mvc - 为什么扩展 Microsoft.AspNetCore.Mvc.RazorPages.Page 类不适用于布局和局部 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58884364/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com