2011-10-17 65 views
1

我有一個Web應用程序,它具有一個包含表單(內置在詳細信息視圖中)以及用戶控件的頁面。頁面上的表單是一個基本的表單,有幾個字段可供輸入和一個複選框。我有jQuery在document.ready上運行,它隱藏了保存用戶控件的部門,並且如果頁面表單中的複選框被選中,jQuery將被觸發以顯示用戶控件。強制AJAX驗證控件在運行時檢查

兩種表格都使用asp驗證工具進行驗證。

如果我填寫表單,選中該複選框,然後填寫用戶控件中的信息並提交,所有工作都完美無瑕,但是如果我填寫基本表單並且不選中複選框以顯示用戶控件,我從用戶控件中得到驗證錯誤(因爲有一個提交和空值)。我怎樣才能解決這個問題?

代碼剪:

$("#submitMFields").hide(); 
$("#submitMFields").toggle(false); 
$("[id$='chkM']").click(function() { 
     $("#submitMFields").toggle("slow"); 
}); 

<asp:TemplateField HeaderText="Currency"> 
       <EditItemTemplate> 
        <asp:DropDownList ID="ddlCurrencyList" 
         runat="server" 
         DataTextField="strCultureName" 
         DataValueField="strCulture" 
         DataSource='<%# CodeLists.Currency() %>' 
         AppendDataBoundItems="true" > 
         </asp:DropDownList> 
       </EditItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Additional Info?"> 
       <EditItemTemplate> 
        <asp:CheckBox runat="server" ID="chkM" /> 
        <div id="submitMFields"> 
         <cms:Control runat="server" ID="initialM" /> 
        </div> 
       </EditItemTemplate> 
      </asp:TemplateField> 
       <asp:CommandField InsertText="Submit" ShowCancelButton="False" 
        ShowInsertButton="True" /> 

用戶控件中,像這樣的驗證用於 -

<asp:RequiredFieldValidator 
         id="rfvStartDate" 
         runat="server" 
         ControlToValidate="txtStart" 
         ErrorMessage="Start Date is Required" 
         Display="dynamic">* 
         </asp:RequiredFieldValidator> 
         <ajax:ValidatorCalloutExtender 
         ID="VCEStart" 
         runat="server" 
         TargetControlID = "rfvStartDate" /> 

回答

1

你可以用ClientValidationFunction控制它的客戶端:

注意:我的例子是使用jQuery,你可以使用任何你想要的DOM選擇(document.getElemenyById..etc)

<asp:RequiredFieldValidator 
        id="rfvStartDate" 
        ClientValidationFunction="rfvStartDateClientValidate"  
        ControlToValidate="txtTitle" 
        runat="server" 
        ControlToValidate="txtStart" 
        ErrorMessage="Start Date is Required" 
        Display="dynamic">* 
        </asp:RequiredFieldValidator> 
        <ajax:ValidatorCalloutExtender 
        ID="VCEStart" 
        runat="server" 
        TargetControlID = "rfvStartDate" /> 

function rfvStartDateClientValidate(sender, args) { 
    //example below, put your client-side logic here 
    //toggling the fields will only hide the validators will still fire 
    //disable them based on the checkbox 
    var v = $('#<%=txtStart.ClientID%>'); 
    if (v.val() == '') { 
     args.IsValid = false; // field is empty 
     v.addClass('requiredHighlight'); 
    } 
    else { 
     v.removeClass('requiredHighlight'); 
    } 
} 
+0

它告訴我,txtStart.ClientID在當前上下文中不存在...... – EvanGWatkins

+0

如果我沒有選中複選框,那麼usercontrol驗證不應該運行,但它仍然會遇到問題... – EvanGWatkins

+0

將控件ID從發件人中提取出來,這只是一個示例,確切的功能對於您而言並不適用。 –