如何在Razor页面中无需Model前缀即可访问PageModel属性?
省略Razor页面Model前缀的两种常用方案
针对你提到的Razor页面必须加Model前缀访问属性的问题,有两种落地性很强的实现方式:
方案1:单页面快速适配(无.NET版本限制)
直接在对应Razor页面的代码块中声明和PageModel属性对应的快捷访问变量即可:
后台PageModel代码(和示例一致)
public class ContactModel : PageModel { public Contact Contact { get; set; } public void OnGet() { Contact = new Contact { Name = "John" }; } }
前端Razor页面代码
@page @model ContactModel @{ // 直接声明快捷访问变量,后续不需要再加Model前缀 var Contact = Model.Contact; } <div>@Contact.Name</div>
如果需要访问的属性较多,你也可以给PageModel添加解构方法,一次性批量导出所有需要的属性:
// 给ContactModel添加解构方法 public void Deconstruct(out Contact contact) { contact = Contact; }
Razor页面中可以直接解构赋值:
@page @model ContactModel @{ var (Contact) = Model; } <div>@Contact.Name</div>
方案2:全局统一配置(适合项目级批量省略前缀)
你可以通过自定义Razor页面基类+视图导入配置的方式,实现全局省略Model前缀:
- 首先定义泛型Razor页面基类
public abstract class CustomRazorPage<TModel> : RazorPage<TModel> { // 直接把Model的属性对外暴露为页面级属性,可按项目需求扩展更多通用属性 public Contact Contact => Model.Contact; }
- 修改项目的
_ViewImports.cshtml文件,添加以下配置,让所有Razor页面继承你自定义的基类:
@inherits CustomRazorPage<TModel>
配置完成后,所有Razor页面都可以直接写@Contact.Name,不需要再加Model前缀。
内容的提问来源于stack exchange,提问作者Ali EXE
相关产品推荐
相关产品推荐

