You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core 3中MVC视图路由至Razor Page动作未触发问题

问题诊断与解决方案

1. 为什么OnGetWithEmail没有被触发?

你当前的表单把asp-area、asp-page和asp-page-handler放在了submit按钮上,但submit按钮的这些属性不会修改表单的action地址。表单会默认提交到当前页面的URL,所以生成的URL里没有handler=WithEmail参数,Razor Pages也就无法匹配到OnGetWithEmail方法。

2. 修复表单提交目标

把区域、页面和处理器的标签助手移到<form>标签上,这样表单会正确生成指向Register页面WithEmail处理器的action:

<form class="form-inline push-10" method="get" 
      asp-area="Identity" 
      asp-page="/Account/Register" 
      asp-page-handler="WithEmail">
    <div class="form-group">
        <label class="sr-only text-white" asp-for="Email">Email Address</label>
        <input class="form-control" type="email" asp-for="Email" placeholder="Your Email..">
    </div>
    <div class="form-group">
        <button class="btn btn-default" type="submit">
            <i class="fa fa-plus"></i> Register
        </button>
    </div>
    <div class="form-group">
        <a class="btn btn-default" asp-controller="Home" asp-action="Index">
            <i class="fa fa-home"></i> Home
        </a>
    </div>
</form>

修改后,提交表单时生成的URL会包含handler=WithEmail参数:
https://localhost:44367/Identity/Account/Register?handler=WithEmail&Email=testemail@mydomain.com,这样OnGetWithEmail方法就会被正确触发。

3. 调整Register页面的处理器逻辑

你原来的OnGetWithEmail方法使用了重定向,这会导致浏览器发起新的请求,丢失原本的邮箱参数(除非手动传递)。更高效的方式是直接填充InputModel并返回页面:

public IActionResult OnGetWithEmail(string email)
{
    if (!string.IsNullOrEmpty(email))
    {
        // 假设你的Register页面已经定义了Input属性
        Input = new InputModel { Email = email };
    }
    return Page();
}

如果你坚持要使用重定向,需要在重定向时传递邮箱参数,然后在默认的OnGet方法中接收并填充:

// OnGetWithEmail方法
public IActionResult OnGetWithEmail(string email)
{
    return RedirectToPage("Register", new { email = email });
}

// Register页面的默认OnGet方法
public IActionResult OnGet(string email = null)
{
    if (!string.IsNullOrEmpty(email))
    {
        Input = new InputModel { Email = email };
    }
    return Page();
}

4. 确保视图绑定正确

最后确认Register页面的邮箱输入框是绑定到Input.Email的,这样值才会自动填充:

<input asp-for="Input.Email" class="form-control" />

这样操作后,用户输入邮箱点击注册,就能正确触发OnGetWithEmail方法,并且注册页面的邮箱输入框会自动填充用户输入的地址。

内容的提问来源于stack exchange,提问作者dinotom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:31:42