如何使用一个index.cshtml来实现两种不同的方法?

问题描述 投票:0回答:1

我正在开发一个简单的网站,并且有一个非常简单的索引页面:

@page
@model MyProject.Pages.IndexModel
@{
    ViewBag.Title = "index";
}
<h2>@string.IsNullOrWhiteSpace(Model.FullName)??"Hi":$"Hi, {Model.FullName}"</h2>

嗯,还有更多,但这是唯一重要的部分。
现在,这也意味着我有两条路线:一条是 / 路线的正常 OnGet() 路线,第二条路线是“Hello/{fullname}”路线。是的,“Hello”部分是一个要求,因为该项目中还有一些 Web API 功能。
背后的代码也很简单:

public class IndexModel() : PageModel
{
    public string? FullName { get; set; }

    public void OnGet()
    {
    }
}

这并不太复杂,并且提供了 / 路线。但我该如何处理“Hello/{fullname} 路线?
请记住,这是此页面的简化版本。它里面有更多的代码来处理各种菜单并调用一些 API 函数等等。
我的问题还在于,这种布局是由我的管理层决定的,因此可能很糟糕,但我对此无能为力。


这背后的逻辑是页面允许用户登录,这是通过 API 调用发生的。所以,没有页面刷新。当用户登录时,JavaScript 会将 URL 从“http://localhost/”修改为“http://localhost/Hello/SomeName”。因此,如果用户刷新,该名称仍然可见,索引页面将显示用户名并检查登录令牌是否仍然有效。如果没有,则会再次弹出登录。

razor-pages .net-8.0 c#-11.0
1个回答
0
投票

您可以将

FullName
值作为可为空的参数传递,并将其绑定到
FullName
属性。您需要进行的更改是:

  1. Program.cs

    中为索引页面注册额外的路由模板
    builder.Services.AddRazorPages()
        .AddRazorPagesOptions(options =>
        {
            options.Conventions.AddPageRoute("/Index", "Hello/{fullname?}");
        });
    
  2. BindProperty
    类中的
    FullName
    属性添加
    IndexModel
    属性,确保它是
    GET
    请求中的绑定目标:

    [BindProperty(SupportsGet = true)]
    public string? FullName { get; set; }
    

更多信息

© www.soinside.com 2019 - 2024. All rights reserved.