【问题标题】:Asp Validators: All firing at once (not wanted)Asp 验证器:一次全部触发(不需要)
【发布时间】:2016-09-12 10:28:13
【问题描述】:

我有一个 ASP.net 网页,该网页托管了一个分为多个更新面板的表单,以改善页面的流程。 如果没有选项卡和更新面板,用户将需要一段时间才能一直滚动到底部。

我有各种独立验证的数据表,它们的摘要显示在我为它们指定的区域中。 当完整文档提交到服务器时,它们都会触发。所有这些都按我的预期工作。

但是,我被要求向此页面添加文件功能,因此我再次使用上传控件,嵌套在它自己的更新面板中(异步触发器绑定到按钮) 当 Required 验证器正确返回 false 并显示错误消息时,这将按预期工作。

这里真正的问题是,在成功验证(和回发)时,整个页面会尝试重新验证,因此,所有必填字段都注册为 false。 这是页面中唯一显示此行为的部分

有谁知道,或者任何人都可以建议我在哪里可以找到我明显丢失的信息。

 <asp:UpdatePanel runat="server" ID="uPnlDocs" UpdateMode="Conditional"> 

        <Triggers>
            <asp:PostBackTrigger ControlID="btnUploadFile" />
        </Triggers>

        <ContentTemplate>

            <div id="DivDocs" runat="server" class="tab-pane" visible="false">

                <div class="panel panel-default">

                    <div class="panel-heading">

                        <asp:Label ID="Label1" runat="server">
                    <h3><u>Supporting Documents</u></h3 >
                            <h4>Please upload any documents you would like to attach to the currently selected DRD record. </h4>
                            <h5>Click the "Browse/Choose File" button to select a file, Then click "Upload File"</h5>

                        </asp:Label>

                    </div>
                    <br />

                    <div class="panel-body">
                        <!-- Controls go in here -->
                        <asp:FileUpload runat="server" ID="DrdFile" CssClass="col-sm-3" ViewStateMode="Enabled"   />
                        <asp:Button runat="server" CausesValidation="true" ValidationGroup="VGUpload" ID="btnUploadFile" Text="Upload File" CssClass="btn btn-success col-sm-2" OnClick="btnUploadFile_Click" />
                        <asp:RequiredFieldValidator runat="server" ID="RFV_Upload" ControlToValidate="DrdFile" Display="None" ValidationGroup="VGUpload" ErrorMessage="File not Selected" CssClass="validationError col-sm-6"></asp:RequiredFieldValidator>


                        <asp:Label runat="server" ID="lblUploadText" Text="Add a description to go with your file" CssClass="col-sm-12" AssociatedControlID="txtUploadFile" />
                        <asp:TextBox runat="server" ID="txtUploadFile" TextMode="MultiLine" Rows="4" CssClass="col-sm-10" />

                    </div>

                </div>

更新——

通过进一步的研究和测试,我发现我的所有验证器都被解雇了,而不仅仅是必需的字段验证器

根据 MSDN; https://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx

当表单提交时,我应该能够停止验证;

  1. 将 放入页面指令(已尝试)

  2. 将设置添加到 web.config 文件(也尝试过)

在这一点上我的想法已经用完了,希望有人能解决这个问题。

【问题讨论】:

    标签: c# asp.net validation requiredfieldvalidator validationsummary


    【解决方案1】:

    FileUpload 控件与UpdatePanel 不兼容。这可能是问题所在。

    来自Microsoft Site

    与 UpdatePanel 控件不兼容的控件

    以下 ASP.NET 控件与部分页面更新不兼容,因此不适合在 UpdatePanel 控件中工作:

    • TreeView 控件在几种情况下。一种是启用不属于异步回发的回调时。另一种是直接将样式设置为控件属性,而不是使用对 CSS 样式的引用来隐式设置控件的样式。另一种是 EnableClientScript 属性为 false(默认为 true)时。另一个是如果您在异步回发之间更改 EnableClientScript 属性的值。

    • 直接将样式设置为控件属性而不是使用对 CSS 样式的引用来隐式设置控件样式时的菜单控件。有关详细信息,请参阅菜单控件概述。

    • FileUpload 和 HtmlInputFile 控制它们何时用于作为异步回发的一部分上传文件。

    • 当它们的 EnableSortingAndPagingCallbacks 属性设置为 true 时,GridView 和 DetailsView 控件。默认为假。

    • Login、PasswordRecovery、ChangePassword 和 CreateUserWizard 控件的内容尚未转换为可编辑模板。

    • 替换控件。

    • 验证控件,包括 BaseCompareValidator、BaseValidator、CompareValidator、CustomValidator、RangeValidator、RegularExpressionValidator、RequiredFieldValidator 和 ValidationSummary 控件。

    【讨论】:

    • 感谢您的回复@VDWWD。我知道 FileUpload 控件不适用于异步回发。在代码中,触发器绑定的是一个完整的回发,这就是它的工作原理。问题是在回发和成功上传文件之后,我所有必需的字段验证器都开始触发(我认为)没有理由
    • 尝试将所有 FileUpload 控件和相应的验证器放在 UpdatePanel 之外。然后会发生什么?
    • 如果我取出更新面板,那么我尝试修复的页面部分将不再显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2021-01-16
    • 2015-08-21
    • 1970-01-01
    • 2014-09-29
    • 2013-02-27
    相关资源
    最近更新 更多