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

.NET Core 2.0中Unobtrusive Ajax服务端验证技术咨询

排查.NET Core 2.0中Unobtrusive Ajax服务端验证问题

结合你的代码和使用场景,我帮你梳理几个关键问题点及解决方案:

1. 自定义验证属性的访问权限与空值处理问题

你的NeverAttribute是私有内部类(默认class无修饰符为private),模型验证框架无法通过反射创建它的实例,导致这个验证规则根本不会被执行。另外,代码里没有处理value为null的情况,直接调用ToString()会抛出空引用异常。

修改后的验证属性代码:

public class NeverAttribute : ValidationAttribute {
    public override bool IsValid(object value) 
    {
        // 先判断value是否为null,再比较字符串
        return value?.ToString() != "never";
    }
}

2. Unobtrusive Ajax提交时的验证反馈处理

当使用Ajax提交表单时,服务端验证失败后需要正确返回分部视图,确保页面能显示错误信息:

调整控制器动作方法

确保验证失败时返回分部视图,而不是完整视图:

[HttpPost]
public IActionResult Create(Blog blog)
{
    if (!ModelState.IsValid)
    {
        // 返回创建分部视图,保留用户输入和验证错误
        return PartialView("_CreateBlog", blog);
    }
    
    // 执行博客保存逻辑...
    
    // 验证成功后返回JSON,用于前端跳转或提示
    return Json(new { success = true, redirectUrl = Url.Action("Index") });
}

确保分部视图包含验证标签助手

你的分部视图必须包含验证摘要和字段级验证标签,才能显示错误信息:

<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
    <label asp-for="Url" class="control-label"></label>
    <input asp-for="Url" class="form-control" />
    <span asp-validation-for="Url" class="text-danger"></span>
</div>
<!-- 其他表单字段 -->

配置Unobtrusive Ajax表单

在表单上添加正确的Ajax属性,指定验证失败后替换页面中的容器:

<!-- 假设你的分部视图被包裹在id为blogFormContainer的容器中 -->
<div id="blogFormContainer">
    <form asp-action="Create" 
          data-ajax="true" 
          data-ajax-method="POST" 
          data-ajax-update="#blogFormContainer" 
          data-ajax-mode="replace">
        <!-- 表单内容 -->
        <button type="submit" class="btn btn-primary">保存</button>
    </form>
</div>

data-ajax-update指定了验证失败后,用返回的分部视图替换哪个元素,这样错误信息会直接显示在原表单位置。

3. 确保Unobtrusive Ajax脚本正确引入

在.NET Core 2.0中,需要按顺序引入依赖脚本:

<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script src="~/lib/jquery-unobtrusive-ajax/jquery.unobtrusive-ajax.min.js"></script>

注意顺序:jQuery必须最先加载,然后是验证脚本,最后是Unobtrusive Ajax脚本,否则会导致功能失效。

按以上步骤调整后,你的服务端验证应该就能正常工作,并且在Unobtrusive Ajax提交时正确显示错误信息了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:07:34