rad*_*vus 11 model .net-core razor-pages
我正在创建一个Partial View作为我的Index.cshtml的一部分.我正在遵循Microsoft文章中概述的基础知识=> https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1
它的摘要是我:在我的Index.cshtml文件中添加一个span,它实际上是从Razor页面加载了HTML.Index.cshtml中的相关HTML如下所示:
<span id="basicView">
@{
Model.UserName = "IndexUser";
await Html.RenderPartialAsync("BasicPartial", Model);
}
</span>
Run Code Online (Sandbox Code Playgroud)
我已将公共属性添加到RazorPage中名为UserName的IndexModel中,它看起来如下所示:
namespace FirstCore.Pages
{
public class IndexModel : PageModel
{
public string UserName;
public void OnGet()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于这个例子,它保持非常简单.因此,在Index.cshtml中的HTML中,您可以看到我将该公共属性的值设置为"IndexUser",然后将Razor页面的名称("BasicPartial" - View)和Model对象传递给BasicaPartial剃刀Page.
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>
Run Code Online (Sandbox Code Playgroud)
实际上,唯一重要的部分是我从传入的模型中读取UserName的属性值的地方.您可以看到我还将@model定义为顶部的IndexModel.
主要问题 - 模型总是空的
当我运行这个非常简单的例子时.应用程序告诉我Model对象为null.
你可能认为它是UserName是null,但是如果我把一个非常简单的指令放在顶部就好了
<div>@Model</div>
Run Code Online (Sandbox Code Playgroud)
然后它告诉我Model是null,即使我知道我正在传递它.
你知道为什么它是null吗?
rad*_*vus 16
如果我对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>
Run Code Online (Sandbox Code Playgroud)
现在它完美无缺.Model对象是一个有效的对象,其属性值按预期设置.(参见下图中突出显示的文字.)
正如OP指出的那样,删除@page指令可以解决问题。
@page 使文件成为 MVC 操作 - 这意味着它直接处理请求,而不通过控制器。
换句话说,尽管您的控制器被称为*,但实际上并没有被使用。
*至少就我而言,我的控制器被称为 . 我没有测试OP的代码
肯定是一个有缺陷的设计。
| 归档时间: |
|
| 查看次数: |
2856 次 |
| 最近记录: |