.Net Core Razor Pages 返回视图和页面

2021-03-26  乐帮网

razor pages netcore

ASP.Net Core Razor Pages项目中返回视图这一块可能会把很多人看懵,经过试验和测试我总结了一下返回试图的几种方式,希望对你有帮助。主要参考MVC视图做对比。

(1)默认提供的方式

public void OnGet() { }
public void OnPost() { }

这种方式默认是返回当前试图的,方法没有返回值。也可以有返回值,返回当前视图的话写法如下:

public IActionResult OnGet()
{
    return Page();
}

(2)异步方法可返回当前视图或者其他视图

public async Task<IActionResult> OnPostAsync()
{
    //await _context.SaveChangesAsync();
    return RedirectToPage("./Index");
}
public async Task<IActionResult> OnGetAsync()
{
     //await _context.SaveChangesAsync();
    return RedirectToPage("./Index");
}

public void OnPostAsync() { }
public void OnGetAsync() { }

(3) 单独方法定义用于返回其它视图

  public async Task<IActionResult> OnGetMyPageAsync()
        {
            await _context.SaveChangesAsync();
           return RedirectToPage("./Index");
           //return Page();
        }

        public ActionResult MyPage()
        {
            return Page();
        }

访问链接:http://localhost:15928/home/index?handler=mypage
这个要注意,return Page()是返回的当前视图,即index.cshtml 并不是 MyPage.cshtml ,这个方法只相当于handler。要返回其它视图只能使用RedirectToPage方法。
正常的模式是一个视图绑定一个.cs控制器类,返回该视图要通过当前控制类的方法,而不是通过其它控制类返回视图,当前控制类只能跳转到其它视图。
(4)返回局部视图

public IActionResult ViewPart()
        {
            return Partial("MyPage2");
            //return Partial("MyPage2",new { name="good"});
        }

这个不多说,和MVC相差不大。

最后说一个有有趣的现象。在异步方法中我们定义如下:

public async Task<IActionResult>  OnGetMyPageAsync
它生成的handler是mypage,要注意哈,不能写成OnGetAsyncMyPage。
在Pages项目中我们以前使用的HttpGet和 HttpPost这样的属性有了代替者,使用方法如下:
加前缀:OnPost /OnGet/OnPut ......
对于异步我们都会加上后缀Async,当然不加也行,只不过加上后解析方法时会自动忽略,例如OnGetMyPageAsync 实际上我们使用 handler=mypage可匹配到。
以上就是我的总结。

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力