为什么我的 Model 对象在 dotnet core 2.x Razor Page 应用程序中的 Razor Page 上始终为 null?

2024-01-12

我正在创建一个部分视图作为 Index.cshtml 的一部分。 我遵循 Microsoft 文章中概述的基础知识 =>https://learn.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1 https://learn.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1

我的总结是: 将一个跨度添加到我的 Index.cshtml 文件中,该文件实际上是从 Razor 页面加载 HTML 的。 Index.cshtml 中的相关 HTML 如下所示:

<span id="basicView">
    @{ 
        Model.UserName = "IndexUser";
        await Html.RenderPartialAsync("BasicPartial", Model);
    }
</span>

我已将公共属性添加到 RazorPage 中名为 UserName 的 IndexModel,如下所示:

namespace FirstCore.Pages
{
    public class IndexModel : PageModel
    {

        public string UserName;
        public void OnGet()
        {

        }
    }
}

本示例保持非常简单。 因此,在 Index.cshtml 的 HTML 中,您可以看到我将该公共属性的值设置为“IndexUser”,然后将 Razor 页面的名称(“BasicPartial”- 视图)和模型对象传递给 BasicaPartial剃刀页面。

BasicPartial 页面非常简单 - 是从 Visual Studio 2017 模板生成的 - Add...Razor Page... 整个内容如下所示:

@page
@model IndexModel
@*
    For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
*@
<div>This is the text and the user name is @(Model.UserName).</div>

实际上,唯一重要的部分是我从传入的模型中读取 UserName 的属性值的地方。 您可以看到我还在顶部将 @model 定义为 IndexModel。

主要问题 - 模型始终为空

当我运行这个非常简单的例子时。应用程序告诉我模型对象为空。

您可能认为 UserName 为空,但如果我在顶部放置一个非常简单的指令,例如

<div>@Model</div> 

然后它告诉我 Model 为空,即使我知道我正在传递它。

你知道为什么它是空的吗?


如果我对 BasicPartial.cshtml 文件进行一项更改,则模型不再为空。

我所要做的就是删除 @page 指令,因此 BasicPartial.cshtml 文件现在如下所示:

@model IndexModel
@*
    For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
*@
<div>This is the text and the user name is @(Model.UserName).</div>

现在它工作得很好。 Model 对象是一个有效的对象,其属性值按预期设置。 (请参阅下图中突出显示的文本。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 Model 对象在 dotnet core 2.x Razor Page 应用程序中的 Razor Page 上始终为 null? 的相关文章

随机推荐