- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我们将 jQuery 版本从 1.7.1 升级到 jQuery 1.9 时,Microsoft 不显眼的验证无法在我们的 MVC 4.0 站点上运行。
尝试修复
这些是我尝试过的修复,以及我读过的一些相关帖子。但我在这里阅读的建议并没有解决问题。
背景
我们正在将 MVC 4.0 站点升级到最新版本的 jQuery。我们的部分目标是将网站上的其他 jQuery 库(例如 Bootstrap)升级到各自的最新版本。这些升级将需要更高版本的 jQuery,比我们当前使用的当前版本 (1.7.1) 更新。我们希望将其应用到 jQuery 1.11,现在我正在实现尝试 jQuery 1.9 并利用 JQMigrate 脚本的中间步骤。我已阅读 GitHub 上针对 jQMigrate 的建议修复,但我不清楚如何在不显眼的验证代码上实现此修复。 https://github.com/jquery/jquery-migrate/blob/master/warnings.md#jqmigrate-jqueryparsejson-requires-a-valid-json-string
示例代码
下面的示例代码显示了 jquery.validate.unobtrusive.js 4.0 版本中 onError 和 onSuccess 函数的更改。每种情况下都会注明 Microsoft 的原始实现。除此之外,评论显示了我们为修复原始实现所做的一些尝试,以及显示从何处获得建议的相应链接。
function onError(error, inputElement) { // 'this' is the form element
/*
// Codeplex fix from http://bit.ly/1xasYAq
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
replace = $.parseJSON(container.attr("data-valmsg-replace") || null) !== false;
// StackOverflow fix from http://bit.ly/1tKjGqS
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
replace = container.attr("data-valmsg-replace") && $.parseJSON(container.attr("data-valmsg-replace")) !== false;
*/
// Original Microsoft implementation
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
replaceAttrValue = container.attr("data-valmsg-replace"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;
container.removeClass("field-validation-valid").addClass("field-validation-error");
error.data("unobtrusiveContainer", container);
if (replace) {
container.empty();
error.removeClass("input-validation-error").appendTo(container);
}
else {
error.hide();
}
}
function onSuccess(error) { // 'this' is the form element
/*
// Codeplex fix from http://bit.ly/1xasYAq
var container = error.data("unobtrusiveContainer"),
replace = $.parseJSON(container.attr("data-valmsg-replace") || null);
// StackOverflow fix from http://bit.ly/1tKjGqS
var container = error.data("unobtrusiveContainer"),
replace = container.attr("data-valmsg-replace") && $.parseJSON(container.attr("data-valmsg-replace"));
*/
// Original Microsoft implementation.
var container = error.data("unobtrusiveContainer"),
replaceAttrValue = container.attr("data-valmsg-replace"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
if (container) {
container.addClass("field-validation-valid").removeClass("field-validation-error");
error.removeData("unobtrusiveContainer");
if (replace) {
container.empty();
}
}
}
这些是 View 中的控件。
@Html.TextBoxFor(m => m.DealerAccountNumber)
@Html.ValidationMessageFor(m => m.DealerAccountNumber)
这些是我们模型中的数据注释。
[Required(ErrorMessage = "Dealer is required")]
[RegularExpression(@"[a-zA-Z0-9]*", ErrorMessage = "Not a valid dealer number")]
[Display(Name = "Account")]
[Remote("ValidateDealerAccountNumber", "Registration", ErrorMessage = "Dealer was not found")]
public string DealerAccountNumber { get; set; }
这是我们 Controller 中的远程验证器。
public virtual ActionResult ValidateDealerAccountNumber(Dealer dealer)
{
var success = (dealer != null);
return Json(success, JsonRequestBehavior.AllowGet);
}
输入无效的经销商编号后,JQMigrate 脚本会显示以下警告:
JQMIGRATE: jQuery.parseJSON requires a valid JSON string jquery-migrate-1.2.1.js:41
console.trace() jquery-migrate-1.2.1.js:43
migrateWarn jquery-migrate-1.2.1.js:43
jQuery.parseJSON jquery-migrate-1.2.1.js:232
q jquery.js:8197
r jquery.js:8000
r jquery.js:8558
我的理解是,Microsoft 在 MVC 5.0 中纠正了这个问题,但我们目前缺乏将整个站点从 MVC 4.0 升级到 MVC 5.0 并执行完整回归测试的奢侈。当然,只要我们引用 JQMigrate,不引人注目的验证就可以工作,但我们不希望这种依赖关系。
目前,我在此项目中使用 jquery.validate.unobtrusive.js 文件版本 4.0 的本地副本,最初是从 http://ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.js 复制的。 .
在该文件中,我用 addBack() 替换了 andSelf(),以与最新版本的 jQuery 保持一致。我尝试了上面第一个代码块中提到的 onError 和 onSuccess 函数中注释掉的更改。但这些都不起作用。
感谢您的帮助。
最佳答案
我尝试了你的场景,但我似乎无法重现这个问题。奇怪的是,您指向的 CDN 上的文件已经修复了 parseJSON
1 2 。它没有修复 andSelf()
但您应该能够通过更新 Unobtrusive.Validation package 来修复该问题。 .
如果更新后继续看到错误,您可以扩展从 JQMigrate 获得的堆栈跟踪吗?它没有提到跟踪中的不引人注目的验证。例如,这是我在脚本中强制出错的地方:
JQMIGRATE:jQuery.parseJSON 需要有效的 JSON 字符串 jquery-migrate-1.2.1.js:41
console.trace() jquery-migrate-1.2.1.js:43
migrateWarn jquery-migrate-1.2.1.js:43
jQuery.parseJSON jquery-migrate-1.2.1.js:232
onError jquery.validate.unobtrusive.js:58
...
关于jquery - 在 MVC 4.0 站点中,Unobtrusive jQuery 在 jQuery 1.9 升级中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669851/
我想重写 jquery.validate.unobtrusive.js 中的 onErrors 方法,以将错误消息显示为 html 元素的超链接。但是,我不想更改 jquery.validate.un
我正在尝试将我的 app.js 转换为 app.ts,唯一缺少的是 jquery.unobtrusive-ajax.js 和/或 jquery.validate.unobtrusive.js 的 .d
我在使用 View 模型的 .NET MVC3 中有以下内容。我正在使用 Razor 和 FluentValidation(但我也尝试过 DataAnnotations,得到了相同的结果)。 从 Vi
我最近在阅读 Unobtrusive javascript 并决定试一试。我是否决定使用这种风格将在以后确定。这只是出于我自己的好奇心,而不是出于任何时间限制的项目。 现在,我正在查看示例代码,很多示
我正在将“jQuery Validate Unobtrusive”与 ASP.NET MVC3 Razor 结合使用。 我有一个带有“评论”表单的页面,如下所示: 型号 public class Co
我正在使用 ASP.NET MVC 构建一个网站,并使用 jQuery validate unobtrusive 库。我想知道是否有办法 Hook 显示验证消息的事件,例如在用户输入无效内容时(而不是
我有一个外部 JavaScript 文件,内联 JavaScript 工作正常,但是当我将其分离(不引人注目)时,它不起作用并且也不显示错误。 我正在使用 Visual Studio Web Deve
我在 .NET MVC4 中通过捆绑来捆绑 JavaScript 文件时遇到问题 我正在添加以下脚本以捆绑在我的代码中 bundles.Add(new ScriptBundle("~/bundle")
ASP.Net Core 中的客户端验证(与 ASP.Net MVC 5 不同)无法正常工作。我有以下代码: public class CountryModel{ [Required]
我正在使用 jQuery Unobtrusive Validation,并且想要在提交表单之前执行一些操作。我不想在成功验证后回发表单,而是想向用户显示成功消息并重置相同的表单以添加其他数据。 在下面
我需要能够使用 jquery.validate 和 jquery.validate.unobtrusive 验证表单上的分数。我已更改我的 html 标记以包含“分数” 在类名中,我在页面中包含了以
我正在做一个小的 vue 项目,我正在使用 marker-animate-unobtrusive在 map 上移动标记的库。这里的问题是,当我在我的一个页面中导入这个库时,整个应用程序都不会加载。例如
我有一个简单的签到应用程序:有一个页面,其中包含一系列用户图片。只需单击图像即可“ checkin ”它们。这会将它们注册到数据库中并显示覆盖图像的“ checkin ”图标。 现在我正在通过 Vie
我从 Wikipeia/Unobtrusive_JavaScript 找到了这些 Unobtrusive JavaScript 的基本原则: 功能(“行为层”)与网页的分离结构/内容和呈现 避免以下情
我想在我的 Rails 3 应用程序中使用 Ujs。任何人都可以向我解释一下 Rails 中的侵入式和非侵入式 JavaScript 吗?为什么 Rails 3 之前的版本不支持 ujs? 最佳答案
我有 3 行用户必须填写的复选框。验证是他必须在每一行中至少选择一个复选框。所以我创建了强制性规则,因为据我所知,必需的规则不适用于复选框。 这一切都很好。问题是,由于每一行都是一组,验证最终会给出
如果我不引用 jquery.unobtrusive-ajax.js 我可以在 Post 上获取附件。如果我引用它,它会给我 null。 @using (Ajax.BeginForm("Index",
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我知道 jQuery 验证插件是什么。我知道 jQuery Unobtrusive Validation 库是由 Microsoft 制作的,并且包含在 ASP.NET MVC 框架中。但我找不到一个
我正在使用 ASP.NET MVC 3 和不显眼的验证 JavaScript。我也在使用 jQuery UI 选项卡,并且我想选择一个包含带有无效消息的元素的选项卡。 因此,要做到这一点,我需要在评估
我是一名优秀的程序员,十分优秀!