我正在尝试在Orchard模块中进行不打扰的客户端验证,但是我遇到了一个问题。
在此示例中,我只是尝试使用Html.TextBoxFor()在文本框字段上强制执行RequiredAttribute。
在我看来,Orchard(LocalizedModelValidatorProvider)实现的自定义ModelValidatorProvider阻止了HTML5输入属性的呈现,特别是:
data-val
data-val-required
用于标准DataAnnotations RequiredAttribute。这些属性是jQuery.validate.unobtrusive所必需的。
LocalizedModelValidatorProvider将RequiredAttribute映射到LocalizedRequiredAttribute,因此在渲染装饰有LocalizedRequiredAttribute的模型属性的文本框输入时,这可能是Orchard ViewEngine中的错误(或未实现的功能)吗?
我怀疑这种情况不会发生:
tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata));
(来自System.Web.Mvc.Html.InputExtensions)
我目前正在运行Orchard 1.3.9。
注意:一个棘手的解决方法是在OrchardStarter模块中删除LocalizedModelValidatorProvider的注册并默认返回标准MVC 3提供程序,尽管我希望尽可能不打扰Orchard源(更不用说我可能在某些时候需要本地化的消息)...
最佳答案
我花了3周的时间来解决MyPrettyCMS对话框中使用的非干扰性验证的问题。
正如您在这些AutoGenerated MetaDataModels中所看到的,我还使用LocalizedRequiredAttribute。
我不了解Orcad,但我想它像我一样将用户表单显示为JQuery对话框。
有两个困难:
第一:必须将对话框字段(重新)附加到用于将数据发送到服务器的表单。
第二个:您必须(重新)解析表单以获得有效的验证
您将在此处找到使用无干扰验证的完整JQuery Dialog based Form并关注$ .validator.unobtrusive.parse(form);行。
这不会影响分析ajax添加的控件。
在JQuery common tool box中查看$ .fn.jqDialogFunction
$.fn.jqDialogFunction = function (idDiv, titre, okFunction, openFunction) {
var dialogBox = $(idDiv)
//$(dialogBox).removeClass("notDisplayed");
$(dialogBox).hide();
$(dialogBox).dialog({
title: titre,
autoOpen: false,
resizable: false,
modal: true,
minHeight: 450,
minWidth: 800,
open: openFunction,
buttons: [
{
text: "Ok",
click: okFunction
}
,
{
text: "Cancel",
click: function () {
$(this).dialog("close");
}
}
]
});
var form = dialogBox.find("form");
if (form != null) {
$.validator.unobtrusive.parse(form);
}
$(idDiv).dialog('open');
}
然后查看方法$ .fn.SaveContent-> $(“#divStructurePage”)。parent()。appendTo(form);
$.fn.SaveContent = function () {
$(this).dialog("close");
var content = tinyMCE.activeEditor.getContent();
$("#hidNewContent").val(content);
var v = $("#StructurePage_FK_LayoutMenu_Translation").val();
var form = $("#frmManagedContent");
$("#divStructurePage").parent().appendTo(form);
form.attr("action", "/"+ $("#hidControllerName").val() +"/Save/" + v);
form.submit();
}
关于asp.net-mvc-3 - Orchard CMS DataAnnotations-客户端验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9178002/