加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – Orchard CMS DataAnnotations – 客户端验证

发布时间:2020-12-15 20:15:29 所属栏目:asp.Net 来源:网络整理
导读:我试图让一个不明显的客户端验证工作在一个果园模块,但我遇到了一个问题. 在这个例子中,我只是试图使用Html.TextBoxFor()强制在一个文本框字段上的RequiredAttribute. 它看起来像是由Orchard(LocalizedModelValidatorProvider)实现的自定义ModelValidatorPro
我试图让一个不明显的客户端验证工作在一个果园模块,但我遇到了一个问题.

在这个例子中,我只是试图使用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对话框中使用的无阻碍的验证问题.

我也使用LocalizedRequiredAttribute,你可以看到那些AutoGenerated MetaDataModels.

我不知道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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读