2021-04-02 乐帮网
razor pages netcore
新建一个ASP.NET Core Razor Pages项目,我们看到在.cshtml– .cshtml.cs文件拥有代码和模型。Razor页面处理方法和请求都来自.cshtml文件。
首先看一下它的命名约定,大概如下:
OnGet
OnPost
OnGetAsync
OnPostAsync
OnPostRemoveAsync
OnGetAddAsync
从列表中,我们可以看到这些名称遵循特定的模式。它们都以On开头,然后是Get或Post,然后是可选的处理程序名称(Remove,Add),最后我们可以添加方法的Async后缀。
以Index.cshtml - Index.cshtml.cs为例进行介绍
(1)默认的GET处理程序
后台方法名: OnGet 也可以是 OnGetAsync ,也可以有返回值,也可以是void,写成void,这样它实际上还是返回Index.cshtml页面。
public void OnGet(){}
public void OnGetAsync(){}
public IActionResult OnGet() { return Page(); }
以上的方法效果相同,当有返回值IActionResult时可以指定像返回 Page,像不像极了 MVC中的View ,对了就是这个感觉。当无返回时(void),它实际是返回 Index.cshtml。
但是记录,上面的方法不能同时存在,只能选择一种,不然会匹配到多个方法,导致错误。InvalidOperationException: Multiple handlers matched. The following handlers matched route data and had all constraints satisfied:
(2)默认的POST和GET处理程序
后台方法名:OnPost 也可以是 OnPostAsync ,返回值解释同上。
public IActionResult OnPostAsync() {}
public IActionResult OnPost() { }
示例如下:
<div class="row">
<div class="col-sm-3">
@if (string.IsNullOrEmpty(Model.Name))
{
<form method="post">
<div class="form-group">
<label for="name">姓名</label>
<input type="text" class="form-control" maxlength="20" id="name" name="name" />
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
}
else
{
<p>My name is @Model.Name</p>
}
</div>
</div>
后台方法:
public IActionResult OnPost(string name)
{
Name = name;
return Page();
}
下面我们的主角登场。在Inderx.cshml.cs里写多个方法,这里方法是指Post方法,写Get无意义,它是随html页面存在的。
(3)自定义Post实现
public IActionResult OnPostPrivacy(string name)
{
Name = name;
return Page();
}
<form method="post">
<div class="form-group">
<label for="name2">姓名</label>
<input type="text" class="form-control" maxlength="20" id="name2" name="name" />
</div>
<button type="submit" asp-page-handler="Privacy" class="btn btn-primary">提交</button>
</form>
(4)高级用法,使用参数
<form method="post" asp-action="Search" asp-controller="Index" >
<div class="form-group">
<label for="name3">姓名</label>
<input type="text" class="form-control" maxlength="20" id="name3" name="name" />
</div>
<button class="btn btn-primary">提交</button>
</form>
public IActionResult OnPostSearch(string name)
{
Name = name;
return Page();
}
是不是很酷?你也可以直接写成<form method="post" action="./Index?handler=Search" >
看完以上示例是不是对Razor Pages有了底气,它已经很简单了。我提供我写的demo下载,可以参考下。
链接:https://pan.baidu.com/s/1RcnTskaxudUKPsGMI3aU_g
关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力