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

ASP.NET Core 2.0如何实现Laravel式验证失败重定向回显错误?

ASP.NET Core 2.0实现Laravel式验证错误重定向回显

当然原生支持啦!ASP.NET Core 2.0完全能实现你想要的、类似Laravel那种验证失败后回原页面带错误提示的功能,根本不用局限于返回JSON或者靠JS验证~下面给你两种常见场景的实现方案:

1. 官方推荐:直接返回登录视图(无需显式重定向)

这是最常用的方式,和Laravel的withErrors体验一致,而且更高效。当ModelState验证失败时,直接返回对应的登录视图并传入用户提交的请求对象,ASP.NET Core会自动把验证错误传递到视图中,还能保留用户之前输入的内容。

修改你的控制器代码:

[HttpPost]
public IActionResult ProcessLogin(LoginRequest loginRequest)
{
    if (!ModelState.IsValid)
    {
        // 如果ProcessLogin和登录视图对应的Action是同一个,直接写return View(loginRequest);就行
        return View("Login", loginRequest);
    }

    // 登录处理逻辑....
    return RedirectToAction("Home");
}

然后在登录视图里,用ASP.NET Core的Tag Helper就能轻松显示错误:

<!-- 显示所有验证错误的汇总 -->
<div asp-validation-summary="All" class="text-danger"></div>

<!-- 单个字段的错误提示 -->
<div class="form-group">
    <label asp-for="Email"></label>
    <input asp-for="Email" class="form-control" />
    <span asp-validation-for="Email" class="text-danger"></span>
</div>

2. 特殊场景:必须重定向回原页面

如果你因为业务需求确实需要重定向(比如POST请求来自其他页面),可以用TempData来存储错误信息,重定向后再把错误恢复到ModelState中,模拟Laravel的redirect()->back()->withErrors行为:

第一步:在POST方法中把错误存入TempData

[HttpPost]
public IActionResult ProcessLogin(LoginRequest loginRequest)
{
    if (!ModelState.IsValid)
    {
        // 把ModelState错误序列化成字典存入TempData
        TempData["Errors"] = JsonConvert.SerializeObject(ModelState.ToDictionary(
            kvp => kvp.Key,
            kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
        ));
        // 重定向回登录页面
        return RedirectToAction("Login");
    }

    // 登录处理逻辑....
    return RedirectToAction("Home");
}

注:ASP.NET Core 2.0默认包含Newtonsoft.Json包,直接用就行~

第二步:在目标Action中恢复错误到ModelState

public IActionResult Login()
{
    // 检查TempData里有没有错误信息
    if (TempData.ContainsKey("Errors"))
    {
        var errors = JsonConvert.DeserializeObject<Dictionary<string, string[]>>(TempData["Errors"].ToString());
        foreach (var error in errors)
        {
            foreach (var message in error.Value)
            {
                ModelState.AddModelError(error.Key, message);
            }
        }
    }

    return View();
}

这样重定向到登录页面后,视图里的错误提示就能正常显示了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:15