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

ASP.NET Core中如何在控制器Index方法获取输入控件值(验证码场景)

解决ASP.NET Core控制器获取验证码输入值的方法

首先你的视图缺少表单容器,导致提交按钮无法将输入数据发送到控制器,先修改cshtml代码,添加表单标签包裹输入控件:

@{
    ViewData["Title"] = "Home Page";
 }
<div class="container">
   <form method="post" asp-action="Index">
       <label for="captcha"><b>Enter chaptcha -  </b></label>
       <label id="lblshowCaptcha"><b>@ViewData["captcha"]</b></label>
       <input id="txtCapValue" type="text" placeholder="Enter captcha" name="cap" required>
       <br/>
       <button class="button" type="submit">Login</button>
       <br />
   </form>
</div>

然后在控制器中添加HttpPost标记的Index方法,用来接收用户提交的验证码值:

// GET请求:生成并展示验证码
public IActionResult Index()
{
    var randnumber = RandomString(6);
    ViewData["captcha"] = randnumber;
    // 将生成的验证码存入Session,用于后续验证对比
    HttpContext.Session.SetString("Captcha", randnumber);
    return View();
}

// POST请求:接收并验证用户输入的验证码
[HttpPost]
public IActionResult Index(string cap)
{
    // 从Session取出之前生成的验证码
    var storedCaptcha = HttpContext.Session.GetString("Captcha");
    
    if (storedCaptcha != null && storedCaptcha.Equals(cap, StringComparison.OrdinalIgnoreCase))
    {
        // 验证码验证通过,执行后续业务逻辑
        return RedirectToAction("Success");
    }
    else
    {
        // 验证失败,重新生成验证码并返回视图
        var newRandNumber = RandomString(6);
        ViewData["captcha"] = newRandNumber;
        HttpContext.Session.SetString("Captcha", newRandNumber);
        ViewData["ErrorMessage"] = "验证码错误,请重新输入";
        return View();
    }
}

// 自定义生成随机验证码的方法
private string RandomString(int length)
{
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var random = new Random();
    return new string(Enumerable.Repeat(chars, length)
                                .Select(s => s[random.Next(s.Length)]).ToArray());
}

关键点说明:

  • 必须用<form>标签包裹表单元素,指定method="post"和asp-action="Index"(ASP.NET Core Tag Helper会自动生成正确路由)。
  • 控制器需要两个Index方法:一个处理GET请求生成验证码,一个用[HttpPost]标记处理POST请求接收输入值。
  • 生成的验证码要存入Session(需在Program.cs中启用Session:添加builder.Services.AddSession();和app.UseSession();),才能在验证时对比用户输入与真实验证码。
  • 输入框的name="cap"要和POST方法的参数名string cap一致,ASP.NET Core的模型绑定会自动把表单值映射到参数上。

如果需要在视图显示验证失败提示,可在cshtml中添加:

@if(ViewData["ErrorMessage"] != null)
{
    <p style="color:red;">@ViewData["ErrorMessage"]</p>
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:25:19