2011-05-05 122 views
2

我有一個ASP.NET 3.5窗體,其中有幾個字段和一個ModalPopup中的子窗體。我遇到的問題是ModalPopup中的RequiredFieldValidator。出於某種原因,它會阻止在ModalPopup內回發。驗證器和提交按鈕都具有相同的ValidationGroup,它們是唯一的。下面是用於子形式的標記:ModalPopup內的RequiredFieldValidator導致問題

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="RoomBuilder.ascx.cs" Inherits="Admin_Controls_RoomBuilder" %> 
<link href="../../../../style/FlexStyle.css" rel="stylesheet" type="text/css" id="style" 
    runat="server" visible="false" /> 
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server" /> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <div class="form" style="width: 420px; height: 500px; padding: 3px; position: relative; 
      text-align: center;"> 
      <div style="width: 280px"> 
       <div class="item smalltitle "> 
        Title: 

       </div> 
       <div class="item"> 
        <asp:TextBox ID="txtTitle" runat="server" Width="250px"></asp:TextBox> 
       </div> 
       <div class="item smalltitle gapontop"> 
        Description: 
       </div> 
       <div class="item"> 
        <asp:TextBox ID="txtDesc" runat="server" Width="250px" Height="40px" TextMode="MultiLine"></asp:TextBox> 
       </div> 
       <div class="item gapontop"> 
        <div class="smalltitle floatLeft" style="width: 120px;"> 
         Room Number 
        </div> 
        <div class="smalltitle floatLeft" style="width: 120px;"> 
         Phone 
        </div> 
       </div> 
       <div class="item"> 
        <div class="floatLeft" style="width: 120px;"> 
         <asp:TextBox ID="txtRoomNo" runat="server" Width="100px"></asp:TextBox> 
        </div> 
        <div class="floatLeft" style="width: 120px;"> 
         <asp:TextBox ID="txtPhone" runat="server" Width="100px"></asp:TextBox> 
        </div> 
       </div> 
       <div class="item smalltitle gapontop "> 
        Type: 
       </div> 
       <div class="item"> 
        <asp:TextBox ID="txtType" runat="server" Width="250px"></asp:TextBox> 
       </div> 
       <div class="item smalltitle gapontop "> 
        Number of Seats: 
        <asp:RequiredFieldValidator ID="RequiredFieldValidatortxtNoSeats" runat="server" ErrorMessage="*" 
         ControlToValidate="txtNoSeats" ValidationGroup="roomVal"></asp:RequiredFieldValidator> 
       </div> 
       <div class="item"> 
        <asp:TextBox ID="txtNoSeats" runat="server" Width="50px"></asp:TextBox> 
        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Not a number" 
         ControlToValidate="txtNoSeats" ValidationGroup="roomVal" ValidationExpression="[0-9]*"></asp:RegularExpressionValidator> 
       </div> 
      </div>    
      <!-- ************************************ --> 
      <div class="topBorder" style="width: 100%; height: 35px; position: absolute; bottom: -8px; 
       right: 2px; text-align: right; padding-top: 11px;"> 
       <asp:Button ID="btnCancel" runat="server" CssClass="button" Text="Cancel" CausesValidation="false" 
        OnClick="btnCancel_Click" ValidationGroup="roomVal" /> 
       <asp:Button ID="btnSave" runat="server" CssClass="button" Text="Save" OnClick="btnSave_Click" CausesValidation="true" ValidationGroup="roomVal" /> 
      </div> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

當驗證器被移除(或的CausesValidation設置爲假),則子形式的職位。 RegularExpressionValidators沒有這個問題。我運行過FireBug,但是我沒有看到任何明顯的錯誤。

有什麼我失蹤了嗎?

+0

你有你的正則表達式驗證設置它不會阻止在空場的一個方式後包的方式RequiredValidator會[0-9] *表示任意數量的字符(包括0)值爲0-9,所以它不會阻止回發爲空的領域。如果它是一個模式彈出窗口,是否沒有允許用戶「完成」模態任務的按鈕?如果是這樣,你可能想看看CustomValidator。您可以將其設置爲需要輸入,但只有當「完成」按鈕被單擊時,並且將其設置爲根本不會執行回發,而是留下頁面的按鈕來處理回發。 – GunnerL3510 2011-05-05 21:15:10

+0

糟糕。抱歉。我複製了RegularExpression驗證器而不是罪魁禍首RequiredFieldValidator。我會解決它。 – 2011-05-05 22:24:05

+0

你可以發佈你的完整標記嗎? – 2011-05-05 22:41:51

回答

2

噢,我的上帝,我好蠢! > :(

找到了問題的原因,在另一個控件中嵌套了另一個相同控件的副本,並且(當然)具有與我的第一個控件相同的ValidationGroup名稱,但所有必需的字段驗證程序都失敗!

哎呀!候選人爲每日WTF!

對不起,浪費大家的時間:(

1

你能否檢查一下你的Button(或其他控件)是否打開彈出窗口和modaldialog擴展器在更新面板之外?

+0

確實是。用作TargetControlID佔位符的Panel,Extender和隱藏控件都在更新面板之外。我已經把所有三個都搬了進去,但它仍然不起作用。 – 2011-05-10 17:06:19

1

我也遇到了modalpopup的奇怪問題。我建議你嘗試一些不同的東西,例如ajaxcontroltoolkit中的數字下拉控件,如果你已經使用它的話。所以你不需要任何驗證器。

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 

<div class="item smalltitle gapontop "> 
        Number of Seats: 
       </div> 
       <div class="item"> 
        <asp:TextBox ID="txtNoSeats" runat="server" Width="50px"></asp:TextBox>    
        <cc1:NumericUpDownExtender ID="txtNoSeatsExt" runat="server" 
         Enabled="true" Minimum="1" Maximum="100" TargetControlID="txtNoSeats" Width="50" /> 
       </div>