加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – ASP.NET MVC RemoteAttribute验证无效 – 操作

发布时间:2020-12-16 07:17:07 所属栏目:asp.Net 来源:网络整理
导读:我一直在努力弄清楚为什么没有触发ValidationController动作. 我在项目范围的web.config中启用了设置: add key="ClientValidationEnabled" value="true" /add key="UnobtrusiveJavaScriptEnabled" value="true" / 我有以下控制器: [OutputCache(Location =
我一直在努力弄清楚为什么没有触发ValidationController动作.

我在项目范围的web.config中启用了设置:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

我有以下控制器:

[OutputCache(Location = OutputCacheLocation.None,NoStore = true)]
public class ValidationController : Controller
{
    private readonly IUserRepository userRepository;

    public ValidationController(IUserRepository userRepository)
    {
        this.userRepository = userRepository;
    }

    public JsonResult IsUserNameAvailable(string username)
    {
        User user = userRepository.Get(u => u.UserName == username);

        if (user == null) return Json(true,JsonRequestBehavior.AllowGet);
        else return Json(false,JsonRequestBehavior.AllowGet);
    }
}

和以下viewmodel:

[Required(ErrorMessage = "Required *")]
    [StringLength(50,MinimumLength = 4,ErrorMessage = "Please keep the username between four and twenty character.")]
    [Remote("IsUserNameAvailable","Validation",ErrorMessage = "A user with this username already exists.")]
    [Display(Name = "Username")]
    public string UserName { get; set; }

我的表格中有以下字段:

<form id="registerForm">
     ...
     @Html.ValidationMessageFor(m => m.UserName)
     @Html.TextBoxFor(m => m.UserName)
     @Html.LabelFor(m => m.UserName)
</form>

我做了ajax表单提交,并且已经完美地完成了服务器端验证:

$.post("/Account/Register",$('#registerForm').serialize(),function(){
   updateFormWithServerGeneratedErrors();
})

虽然服务器为我的字段生成了正确的输入标记:

<input ... data-val-remote-url="/Validation/IsUserNameAvailable" data-val-remote-additionalfields="*.UserName" data-val-remote="A user with this username already exists." ... >

我可以通过在url中输入来手动点击我的操作:“/ Validation / IsUserNameAvailable?username = SomeName”但是Fiddler没有在按键或焦点更改上显示对此URL的任何请求.

根据this tutorial我不需要编写任何javascript来使这个工作.是的,我开始修改表单时已经加载了jquery.validate.js和jquery.validate.unobtrusive.js脚本.

这里有什么问题?

解决方法

好的,我找到了答案.

引用Darin Dimitrov here:

“不显眼的验证不会在动态添加元素到DOM的情况下开箱即用 – 例如向服务器发送AJAX请求,返回部分视图,然后将此部分视图注入DOM.

为了使其工作,您需要使用不显眼的验证框架注册这些新添加的元素.为此,您需要在新添加的元素上调用$.validator.unobtrusive.parse.您应该将此代码放在将部分注入DOM的AJAX成功处理程序中.“

框架在页面加载时调用此方法一次,我的场景中的问题是表单本身是一个jquery对话框,因此即使初始加载也是“动态的”.我必须在对话框加载时使用不显眼的框架注册表单元素:

$.validator.unobtrusive.parse('#registerForm');

如果它在服务器端没有验证,我的ajax调用也将返回并替换表单:

registerDialog.empty().html(result.viewResult);

所以我不得不在成功回调上调用parse(),以确保在ajax提交后验证继续有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读