【问题标题】:RequiredFieldValidator inside ModalPopup causing problemsModalPopup 中的RequiredFieldValidator 导致问题
【发布时间】:2011-08-19 16:14:38
【问题描述】:

我有一个 ASP.NET 3.5 表单,其中包含多个字段和一个 ModalPopup 内的子表单。我遇到的问题是 ModalPopup 中的RequiredFieldValidator。出于某种原因,它阻止了在 ModalPopup 中的回发。验证器和提交按钮都具有相同的唯一验证组。这是子表单的标记:

<%@ 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 设置为 false)时,子表单发布。 RegularExpressionValidators 没有这个问题。我已经运行了 FireBug,但没有看到任何明显的错误。

我有什么遗漏吗?

【问题讨论】:

  • RegEx 验证器的设置方式不会像RequiredValidator 那样阻止在空白字段上的post pack。 [0-9]* 表示任意数量的字符(包括 0)的值为 0-9,因此它不会阻止空字段的回发。如果是模态弹窗,是不是有一个按钮可以让用户“完成”模态的任务?如果是这样,您可能需要查看 CustomValidator。您可以将其设置为需要输入,但仅在单击“完成”按钮时,也可以将其设置为根本不进行回发,让页面的按钮来处理回发。
  • 糟糕。对不起。我复制了一个正则表达式验证器,而不是罪魁祸首RequiredFieldValidator。我会解决的。
  • 你能发布你的完整标记吗?
  • 按要求。添加了子表单的完整标记。
  • 你是说必填字段验证器是罪魁祸首吗?您在测试时是否真的在 txtNoSeats 文本框中输入了一个值?

标签: asp.net ajax validation


【解决方案1】:

天哪,我太傻了!! >:(

找到问题的原因。同一控件的另一个副本嵌套在另一个控件中。并且(当然)与我的第一个控件具有相同的 ValidationGroup 名称,所有必填字段验证器都无法工作!

啊!每日WTF的候选人!

很抱歉浪费了大家的时间:(

【讨论】:

    【解决方案2】:

    您能否检查一下您打开弹出窗口和模态对话框扩展器的按钮(或其他控件)是否在更新面板之外?

    【讨论】:

    • 确实如此。用作 TargetControlID 占位符的面板、扩展器和隐藏控件都在更新面板之外。我已经把三个都搬进去了,但还是不行。
    【解决方案3】:

    我也遇到了 modalpopup 的奇怪问题。我建议你尝试一些不同的东西,例如来自 ajaxcontroltoolkit 的 numericupdown 控件,如果你已经使用它的话。所以你不需要任何验证器。

    <%@ 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-29
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      相关资源
      最近更新 更多