如何在Razor Pages应用的不同页面之间传递变量?
Razor Pages 跨页面传递字符串变量实现方案
下面是三种最常用的实现方式,可根据你的业务场景选择:
1. Query String 传参(推荐非敏感短字符串使用)
- 优势:实现最简单,不需要额外配置,适合传递长度较短的非敏感数据
- 实现步骤:
跳转端(signup页面)
如果是后端逻辑跳转,在signup.cshtml.cs的处理方法中调用RedirectToPage时传入路由参数:
public IActionResult OnPost() { // 替换为你要传递的实际字符串变量 string targetString = "注册成功的提示信息/已注册邮箱"; return RedirectToPage("./signin", new { customParam = targetString }); }
如果是前端直接跳转,直接在标签中绑定路由参数:
<!-- signup.cshtml 前端代码 --> <a asp-page="./signin" asp-route-customParam="@你要传递的字符串变量">前往登录页</a>
接收端(signin页面)
在signin.cshtml.cs中添加属性并绑定Get参数即可直接读取:
public class SigninModel : PageModel { [BindProperty(SupportsGet = true)] public string CustomParam { get; set; } public void OnGet() { // 此处CustomParam就是从signup页面传递过来的值 } }
2. TempData 传参(推荐单次读取场景使用)
- 优势:参数不会暴露在URL中,读取后自动销毁,适合传递仅需展示一次的提示类内容
- 实现步骤:
跳转端(signup页面)
public IActionResult OnPost() { string targetString = "注册成功,请登录"; TempData["CustomKey"] = targetString; return RedirectToPage("./signin"); }
接收端(signin页面)
public void OnGet() { string receivedString = TempData["CustomKey"] as string; // 读取后TempData的对应值会自动清除,刷新页面后无法二次获取 // 如果需要保留值,可调用 TempData.Keep("CustomKey") }
3. Session 存储(推荐多页面复用数据场景使用)
- 优势:数据会在你配置的有效期内一直存在,可跨多个页面访问
- 实现步骤:
首先需要在项目的Program.cs中配置Session服务:
// 添加Session服务 builder.Services.AddSession(opt => { opt.IdleTimeout = TimeSpan.FromMinutes(20); // 自定义过期时间 opt.Cookie.HttpOnly = true; opt.Cookie.IsEssential = true; }); // 中间件配置,需放在UseRouting和UseAuthorization之间 app.UseSession();
赋值(signup页面)
public IActionResult OnPost() { string targetString = "需要跨页面共享的字符串"; HttpContext.Session.SetString("SessionKey", targetString); return RedirectToPage("./signin"); }
读取(signin页面)
public void OnGet() { string receivedString = HttpContext.Session.GetString("SessionKey"); // 有效期内任意页面都可读取该值 }
内容的提问来源于stack exchange,提问作者Eric Neuwirth
相关产品推荐
相关产品推荐

