Mik*_*ons 10 jquery-validate orchardcms data-annotations unobtrusive-validation asp.net-mvc-3
我试图在Orchard模块中进行不引人注意的客户端验证,但我遇到了问题.
在这个例子中,我只是尝试使用Html.TextBoxFor()在文本框字段上强制执行RequiredAttribute.
它看起来好像Orchard(LocalizedModelValidatorProvider)实现的自定义ModelValidatorProvider阻止了HTML5输入属性的呈现,具体来说:
data-val
data-val-required
Run Code Online (Sandbox Code Playgroud)
对于标准DataAnnotations RequiredAttribute.jQuery.validate.unobtrusive需要这些属性才能工作.
LocalizedModelValidatorProvider将RequiredAttribute映射到LocalizedRequiredAttribute,因此在渲染用LocalizedRequiredAttribute修饰的模型属性的文本框输入时,Orchard ViewEngine中的错误(或未实现的功能)可能是多少?
我怀疑这不会发生:
tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata));
Run Code Online (Sandbox Code Playgroud)
(来自System.Web.Mvc.Html.InputExtensions)
我目前正在运行Orchard 1.3.9.
注意:一个hacky解决方法是删除OrchardStarter模块中LocalizedModelValidatorProvider的注册,并默认返回标准MVC 3提供程序,尽管如果可能的话我不想打扰Orchard源(更不用说我可能需要本地化)消息在某些时候)......
小智 0
我花了 3 周的时间解决了 MyPrettyCMS 中对话框中使用的不显眼的验证问题。
我还使用 LocalizedRequiredAttribute ,正如您在那些AutoGenerated MetaDataModels中看到的那样。
我不了解 Orcad,但我认为它像我一样将用户表单呈现为 JQuery 对话框。
有两个困难:
第一:您必须将对话框字段(重新)附加到用于将数据发送到服务器的表单。
第二:您必须(重新)解析表单才能获得有效的、不显眼的验证
您将在这里找到一个完整的基于 JQuery 对话框的表单,可进行不显眼的验证,并将焦点放在 $.validator.unobtrusive.parse(form); 行上。这迫使分析 ajax 添加的控件变得不那么引人注目。
查看JQuery常用工具箱中的$.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');
}
Run Code Online (Sandbox Code Playgroud)
然后看方法 $.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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |