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

asp.net-mvc – ASP.NET MVC3自定义不显眼的客户端验证不会阻止A

发布时间:2020-12-16 06:44:39 所属栏目:asp.Net 来源:网络整理
导读:我有一个“更改密码”页面,需要在发送之前通过 Javascript哈希在页面上输入的任何密码.为了使它复杂化,页面通过jQuery load()调用加载,并由jQuery.Form ajaxForm()调用提交.如果一切都在MVC2中工作,但MVC3给我带来了麻烦. 也就是说,我有一个带有“更改密码”
我有一个“更改密码”页面,需要在发送之前通过 Javascript哈希在页面上输入的任何密码.为了使它复杂化,页面通过jQuery load()调用加载,并由jQuery.Form ajaxForm()调用提交.如果一切都在MVC2中工作,但MVC3给我带来了麻烦.

也就是说,我有一个带有“更改密码”链接的页面,当点击它时,将更改密码页面加载到jQuery模式弹出窗口中,然后更改密码页面上的表单通过jQuery.Form库提交(基本上只是包装一个$.ajax调用),并将其结果返回到模态相同的模态弹出窗口.

基本上,我有一个具有两个属性的模型,OldPassword和NewPassword.我有两个由视图生成的隐藏字段.它们保存了另外两个字段的散列值,PrehashOldPassword和PrehashNewPassword,并通过keyup事件得到更新(我知道,这意味着它在每个keyup上都做了一个完整的SHA256哈希……效率低下,但得到了测试的工作).这里的关键是需要在这些Prehash字段上执行正则表达式验证和必需的字段验证,这些字段仅存在于客户端(显然我不希望以任何方式将这些字段传输到服务器).

所以我手动创建这两个并将data-val- *属性添加到元素中,即它们不是由MVC助手等生成的.我猜这是我遗漏的东西.当表单提交所有字段为空时,应弹出所有错误,但表单仍然向前并提交.

==

所以我尝试过的事情:

是的,不显眼的库parse()方法已被调用来解析AJAX加载的表单内容,它似乎正确地获取所有数据验证的东西,因为我看到错误显示为字段blur(),当我点击提交(在ajax请求完成之前并替换弹出窗口的内容).

可能需要注意:在AJAX成功将更改密码页面加载到弹出窗口后,调用不显眼的库的解析方法… AJAX表单提交绑定放在document.ready的加载内容上,ergo,AJAX表单提交绑定可能是在解析方法可能绑定到提交事件的验证调用之前绑定并因此触发之前…

然而,(1)我在其他地方做同样的事情没有问题,唯一的区别是我手动将这些data-val- *属性放在我手动创建的元素上!并且(2),如果我在OldPassword或NewPassword字段上引起某种错误,即通过不向它们加载值而导致必需的字段验证错误,它们会显示错误,并成功停止通过jQuery.Form提交表单方法.

所以我觉得这里有些错误:

<input id="PrehashNewPassword" type="password" name="PrehashNewPassword" data-val-required="The password field is required." data-val-regex-pattern="<%= RegexHelper.PasswordRegularExpression %>" data-val-regex="<%= RegexHelper.PasswordRegularExpressionError %>" data-val="true" />

我知道jquery.validate正在使规则正确,因为我看到了错误.当这些手动生成的元素出现错误时,它不会停止提交表单,除非我做这样的事情,并在表单的AJAX提交上添加一个预提交回调:

$("#ChangePasswordForm").ajaxForm({
            beforeSubmit: function () { if (!$('#ChangePasswordForm').valid()) { return false; } },target: '#overlay'
        });

虽然这有效,但它有点难看,我相信它会导致验证被调用两次……不是很大,但不太理想.那么我是否需要在不引人注目的库中进行其他调用来绑定这些调用?

解决方法

不确定您是否发现了问题,但您可能会尝试
返回false
如果表格无效……

.
.
.
    if (!$('form').valid()) {
           return false;
    }

    // JSON POST...
.
.
.

如果这不起作用,那么你可以尝试使用:

$.validator.unobtrusive.parse($("#dynamicData"));

动态添加自定义输入后. “dynamicData”是包裹在表单周围的元素的ID

以上是从这里找到的:http://weblogs.asp.net/imranbaloch/archive/2011/03/05/unobtrusive-client-side-validation-with-dynamic-contents-in-asp-net-mvc.aspx

(编辑:李大同)

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

    推荐文章
      热点阅读