10

我試圖在烏節路模塊內工作得不顯眼的客戶端驗證,但是我遇到了問題。Orchard CMS DataAnnotations - 客戶端驗證

在這個例子中,我只是試圖使用Html.TextBoxFor()在textbox字段上強制RequiredAttribute。

在我看來如同通過果園(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)

我目前正在運行的果園1.3.9。

注:哈克解決方法是刪除LocalizedModelValidatorProvider的註冊OrchardStarter模塊中回到默認的標準MVC 3提供商,儘管我渴望不要去打擾,如果在所有可能的烏節源(未提及我可能需要在某些點本地化的消息)...

+0

這是否解決了。實現這一目標時,我碰到了同樣的磚牆。 – Mounhim 2012-08-19 18:16:55

+0

不是由我 - 雖然值得注意的是這是在版本1.3.9,這是近一年的時間 - 它可能已被修復在後來的版本。上面所描述的解決方法對我來說確實沒問題,所以沒有追求它 - 我可能應該提出了一個bug ... – 2012-08-21 12:48:43

+0

爲什麼不嘗試使用它,它內置了動態表單生成功能,它內置了驗證策略定義。 https://gallery.orchardproject.net/List/Modules/Orchard.Module.oforms – bijayk 2013-01-22 06:19:38

回答

0

我花了3周的時間來解決在MyPrettyCMS中的對話框中使用unobstrusive驗證的問題。

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

我不知道Orcad,但我認爲它將用戶窗體呈現爲JQuery對話框,就像我一樣。

有兩個難點:

1日:你必須(重新)連接對話框字段您將使用將數據發送到服務器的形式。

第二:你得(重新)解析形式獲得工作unobstrusive驗證

您將在這裏找到一個完整的JQuery Dialog based Form與unobstrusive驗證工作,並重點線$ .validator.unobtrusive.parse(表格) ; 這種力量不容忽視地分析ajax添加控件。

看$ .fn.jqDialogFunction在JQuery common tool box

$.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」)父()。appendTo(形式);

$.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(); 
} 
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」。

在Web.cofig文件中添加以下設置。

<appSettings> 
<add key="ClientValidationEnabled" value="true"/> 
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings>