2011-05-05 124 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>