Orchard CMS DataAnnotations - 客户端验证

时间:2012-02-07 14:27:35

标签: asp.net-mvc-3 jquery-validate data-annotations orchardcms unobtrusive-validation

我正试图在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源,如果在所有可能的(更不用说我可能在某些时候需要本地化的消息)......

2 个答案:

答案 0 :(得分:0)

我花了3周的时间来解决MyPrettyCMS中对话框中使用的不显眼验证问题。

我也使用LocalizedRequiredAttribute,你可以在那些AutoGenerated MetaDataModels中看到。

我不知道Orcad,但我认为它像我一样将用户表单呈现为JQuery Dialog。

有两个困难:

1:你必须(重新)将对话框字段附加到用于将数据发送到服务器的表单。

2 nd:您必须(重新)解析表单以获得有效的不显眼验证

你会在这里找到一个完整的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();
}

答案 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>