2012-11-05 14 views
3

我有一個ListViewASP.NET:使用RequiredFieldValidator與多個文本框ListView中

<asp:ListView ....> 
    <asp:TextBox ID="txtComment" ... /> 
    <asp:RequiredFieldValidator ID="rfvComment" ControlToValidate="txtComment" ... /> 
    <act:ValidatorCalloutExtender ID="vceComment" TargetControlID="rfvComment" ... /> 

    <asp:Button ID="btnAddComment" ... /> 

</asp:ListView> 

讓我們說這個的ListView創建以下:

TextBox1的 Button1的

TextBox2中 Button2的

TextBox3 Button3

如果我點擊Button2,RequiredFiledValidator/ValidatorCalloutExtender應用於TextBox1而不是TextBox2,如果我點擊Button3,RequiredFiledValidator/ValidatorCalloutExtender也應用於TextBox1,我希望RequiredFiledValidator/ValidatorCalloutExtender應用於TextBox1旁邊的TextBox按鈕,所以如果我點擊Button3我希望它適用於TextBox3。

有誰知道我該如何做到這一點?

謝謝。

回答

4

使用ValidationGroup屬性和產生它動態值:

<script type="text/javascript"> 
    var originalValidatorUpdateDisplay = ValidatorUpdateDisplay; 
    ValidatorUpdateDisplay = function (val) { 
     originalValidatorUpdateDisplay.call(null, val); 
     var isHidden = val.style.display == "none" || val.style.visibility == "hidden"; 

     var extender = Sys.UI.Behavior.getBehaviorsByType(val, Sys.Extended.UI.ValidatorCalloutBehavior); 
     if (extender && extender.length == 1) { 
      extender = extender[0]; 
      if (isHidden) { 
       extender.hide(); 
      } 
      else { 
       extender.show(true); 
      } 
     } 
    } 
</script> 

<asp:TextBox runat="server" ID="TextBox1" /> 
<asp:RequiredFieldValidator runat="server" ControlToValidate="TextBox1" Text="*" 
    ValidationGroup='<%# "validationGroup_" + Container.DataItemIndex.ToString() %>' /> 
<asp:Button runat="server" Text="Click Me" ValidationGroup='<%# "validationGroup_" + Container.DataItemIndex.ToString() %>' /> 

低於表格的最下方添加腳本

我想這將是更好的定製工具包源,但我沒有心情做這:)所以希望這個腳本將解決您的問題

+0

謝謝,這工作完美,但我有一個小問題與ValidatorCalloutExtender雖然,如果我點擊Button1,ValidatorCalloutExtender出現在TextBox1旁邊,但如果我點擊Button3 ValidatorCalloutExtender仍然保留在TextBox1它不會轉移到TextBox3。 –

+1

@EricBergman,我已經更新了我的答案 –

+0

非常感謝您抽出寶貴時間來創建此腳本,但嘗試之後,現在無法使用擴展程序彈出窗口。 –

0

嘗試不便(例如,應該工作)

<asp:Panel ID="registration" defaultbutton="regButton" runat="server"> 

<asp:TextBox ID="name" Rows="1" CssClass="text" runat="server" ValidationGroup="Registration"> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Enter your name please" Text="*" ControlToValidate="name" EnableClientScript="False" Display="Dynamic" ValidationGroup="Registration" /> 


<asp:TextBox ID="address" Rows="1" CssClass="text" runat="server" ValidationGroup="Registration"></asp:TextBox> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Enter your address please" Text="*" ControlToValidate="address" EnableClientScript="False" Display="Dynamic" ValidationGroup="Registration" /> 


<asp:ValidationSummary DisplayMode="BulletList" EnableClientScript="false" ID="validation_sum" runat="server" HeaderText="Errors list" ValidationGroup="Registration"/> 


<asp:Button runat="server" id="regButton" Text="Register please" ValidationGroup="Registration" OnClick="RegisterUser"/> 

</asp:Panel> 
+0

感謝您的建議,但問題是,我不知道我會有多少控制,它可能是100個文本框和100個按鈕,所以這將不行。 –