TL; DR: 在ASP.NET Core 2.0中,是否可以实现“部分页面”?如果可以,为什么会出现下面描述的错误?
我一直在尝试使用ASP.NET 2.0的新特性——Razor Page,但是在使用partials时遇到了一些问题。上面链接的文档在多个地方提到“partials”,但只是神秘兮兮地说了一些话,比如:“与MVC控制器和传统的Razor视图一起使用的布局、模板和partials只需要工作。”他们是指像我们习惯的Partial Views,还是一些新的部分页面?他们显示可以将具有传统Partial
后缀名称的文件放置在Pages/
文件夹中,但他们提到的文件(例如_ValidationScriptsPartial.cshtml
)没有@page
声明。如果“部分页面”确实是一个新事物,那么我期望以下最小场景可以正常工作:
A Page file named
Derp.cshtml
:@page @namespace MyApp.Pages @model DerpModel <p>Member 1: @Model.Member1</p> <p>Member 2: @Model.Member2</p>
A class file named
Derp.cshtml.cs
in the same directory (nested under the first in VS 2017's Solution Explorer), containing the following class:namespace MyApp.Pages { public class DerpModel : PageModel { public void OnGet() { Member1 = "Derp Member1"; Member2 = "Derp Member2"; } public string Member1 { get; set; } public string Member2 { get; set; } } }
A second Page file named
DerpWrapper.cshtml
in the same directory, with the following code:@page "{id}" @namespace MyApp.Pages @model DerpModel <p>Outer Member 1: @Model.Member1</p> <p>Outer Member 2: @Model.Member2</p> @Html.Partial("Derp", Model)
And of course a
_ViewImports
file that declares@namespace MyApp.Pages
MyApp.Pages.Derp_Page.get_Model()
MyApp.Pages.Derp_Page+<ExecuteAsync>d__0.MoveNext() in Derp.cshtml
+
<p>Inner Member1: @Model.Member1</p>
...
MyApp.Pages.DerpWrapper_Page+<ExecuteAsync>d__0.MoveNext() in DerpWrapper.cshtml
+
@Html.Partial("Derp", Model)
...
为什么“包装器”页面的
Model
等于空?是否没有办法定义一个Razor页面并通过Html.Partial()
从另一个页面或视图中显示它?
@page
指令不会导致页面像一个操作一样吗?这将意味着必须使用子操作来嵌入它,而不是.Partial
,但谁知道呢。无论如何,我只会尝试从部分文件Derp.cshtml中删除@page
。 - AaronLS