我正试图在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。
注意:一个hacky解决方法是删除OrchardStarter模块中LocalizedModelValidatorProvider的注册,并默认返回标准MVC 3提供程序,尽管我不想打扰Orchard源,如果在所有可能的(更不用说我可能在某些时候需要本地化的消息)......
答案 0 :(得分:0)
我花了3周的时间来解决MyPrettyCMS中对话框中使用的不显眼验证问题。
我也使用LocalizedRequiredAttribute,你可以在那些AutoGenerated MetaDataModels中看到。
我不知道Orcad,但我认为它像我一样将用户表单呈现为JQuery Dialog。
有两个困难:
1:你必须(重新)将对话框字段附加到用于将数据发送到服务器的表单。
2 nd:您必须(重新)解析表单以获得有效的不显眼验证
你会在这里找到一个完整的JQuery Dialog based Form处理不引人注意的验证,并将注意力集中在$ .validator.unobtrusive.parse(form); 这种力量不引人注意地分析了ajax增加的控制。
中查看$ .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();
}
答案 1 :(得分:0)
在编辑器模板视图中添加此代码
@model ABC.Models.ModelName
@{
Script.Require("jQuery").AtHead();
Script.Include("jquery.validate.min.js").AtHead();
Script.Include("jquery.validate.unobtrusive.min.js").AtHead(); }
添加" jquery.validate.min.js,jquery.validate.unobtrusive.min.js"在你的模块" Scripts"文件夹中。
在Web.cofig文件中添加以下设置。
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>