我正在尝试在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/

10-12 01:08