我正在创建一个部分视图作为我的Index.cshtml的一部分。 我正在遵循Microsoft文章=>中概述的基础知识。 https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1
总结是我: 将span添加到我的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中,您可以看到我将该公共属性的值设置为&#34; IndexUser&#34;然后我将Razor页面的名称(&#34; BasicPartial&#34; - View)和Model对象传递给BasicaPartial Razor页面。
BasicPartial页面非常简单 - 从Visual Studio 2017模板生成 - 添加... Razor页面...整个事情看起来像:
@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。
主要问题 - 模型始终为空
当我运行这个非常简单的例子时。应用程序告诉我Model对象为null。
您可能认为UserName是null,但如果我在顶部放置一个非常简单的指令,如
<div>@Model</div>
然后它告诉我模型为空,即使我知道我传递它。
你知道为什么它是空的吗?
答案 0 :(得分:11)
如果我对BasicPartial.cshtml文件进行了一次更改,那么Model不再为null。
我所要做的就是删除@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对象是一个有效的对象,其属性值按预期设置。 (参见下图中突出显示的文字。)
答案 1 :(得分:0)
与OP pointed out一样,删除@page指令将解决问题。
@page使文件成为MVC动作-这意味着它无需通过控制器即可直接处理请求。
换句话说,实际上并没有使用您的控制器,尽管被称为*。
*至少就我而言,我的控制器称为。我没有测试OP的代码
肯定是有缺陷的设计。