页面验证无法使用JavaScript代码

时间:2017-04-11 03:18:04

标签: javascript asp.net validation requiredfieldvalidator

我在面板中有一个下拉列表中有requiredFieldValidator。如果下拉列表中没有选择数据,则btnSubmitReport可以正常工作以验证和显示*。选择数据并单击btnSubmitReport以显示数据后,它仍然可以正常工作。现在,如果您取消选择下拉列表并点击btnSubmitReport,它将不再进行验证。这是因为第一次单击btnSubmitReport_Click时,它会检查是否有Page.IsValid并调用JavaScript代码,但后续调用只是调用JavaScript代码而btnSubmitReport_Click未被调用以查看页面是否有效。请建议。以下是aspx页面上的示例代码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testValidator.aspx.cs"
    MasterPageFile="~/Site.master" Inherits="textXslt.testValidator" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"></script>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <script src="Styles/Reports.js" type="text/javascript"></script>
    <h3>
        <asp:Label ID="lblHeader" runat="server" Text="Reporting Filter"></asp:Label>
    </h3>
    <div style="text-align: right">
        <input id="lnkShowFilter" type="button" value="Show Filter" onclick="ShowF()" class="btn" />
        <input id="lnkHideFilter" type="button" value="Hide Filter" onclick="HideF()" class="btn" />
    </div>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div id="divFilter">
        <asp:UpdatePanel ID="uplMain" runat="server">
            <ContentTemplate>
                <asp:PlaceHolder ID="PlaceHolder1" runat="server">
                    <table>
                        <tr>
                            <td valign="top">
                                <table>
                                    <tr>
                                        <td>
                                            <asp:CheckBox ID="chkBusiness" runat="server" Text="Business Division" CssClass="chkbox" />
                                        </td>
                                        <td>
                                            <asp:DropDownList ID="ddlBusiness" runat="server" AppendDataBoundItems="true" AutoPostBack="true"
                                                CausesValidation="True" OnSelectedIndexChanged="ddlBusiness_SelectedIndexChanged"
                                                ValidationGroup="grpSubmit" Width="350px">
                                                <asp:ListItem Selected="True" Value="-1">--- SELECT ---</asp:ListItem>
                                                <asp:ListItem>Orange</asp:ListItem>
                                                <asp:ListItem>Apple</asp:ListItem>
                                                <asp:ListItem>Mango</asp:ListItem>
                                            </asp:DropDownList>
                                            </asp:DropDownList>
                                            <asp:RequiredFieldValidator ID="rfvBusiness" runat="server" ControlToValidate="ddlBusiness"
                                                Enabled="true" ToolTip="Please select a Business." ErrorMessage="*" InitialValue="-1"
                                                ForeColor="Red" CssClass="required" Display="Dynamic" ValidationGroup="grpSubmit">
                                            </asp:RequiredFieldValidator>
                                        </td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                    </table>
                </asp:PlaceHolder>
                <hr size="1" />
                <div style="text-align: center">
                    <table style="width: 10%">
                        <tr>
                            <td>
                                <asp:Button ID="btnHome" runat="server" Text="Home" OnClick="btnHome_Click" CssClass="btn" />
                            </td>
                            <td>
                                <asp:Button ID="btnSubmitReport" runat="server" Text="Submit" OnClick="btnSubmitReport_Click"
                                    ValidationGroup="grpSubmit" CssClass="btn" />
                            </td>
                        </tr>
                    </table>
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    <div id="divResult">
        <asp:UpdatePanel ID="uplGrid" runat="server">
            <ContentTemplate>
                Here go Results of grid
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
</asp:Content>

这是背后的代码:

    protected void btnSubmitReport_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            btnSubmitReport.Attributes["onclick"] = "javascript:SubmitF();";
        }
        //then do rest of the processing to display grid results
    }

这是Reports.js文件:

    function ShowF() {
    $('#lnkShowFilter').hide();
    $('#divFilter').show();
    $('#lnkHideFilter').show();
    $('#divResult').hide();
    $('#MainContent_lblHeader').text("Reporting Filter");
}

function HideF() {
    $('#lnkShowFilter').show();
    $('#divFilter').hide();
    $('#lnkHideFilter').hide();
    $('#divResult').show();
    $('#').show();
    $('#MainContent_lblHeader').text("Report Result");
}

function SubmitF() {
   // alert("SubmitF");
    $('#lnkShowFilter').show();
    $('#divFilter').hide();
    $('#lnkHideFilter').hide();
    $('#divResult').show();
    $('#MainContent_lblHeader').text("Report Result");
}

1 个答案:

答案 0 :(得分:0)

好吧,我能够通过使用客户端验证来解决问题。所以我创建了一个函数

    <script type="text/javascript">
        function ValidateAndShowPopup() {
            if (Page_ClientValidate('grpSubmit')) {
                SubmitF();
            }
        }

并将OnclientClick和OnClick添加到提交按钮

 <asp:Button ID="btnSubmitReport" runat="server" Text="Submit" OnClick="btnSubmitReport_Click" ValidationGroup="grpSubmit" OnClientClick="ValidateAndShowPopup()" CssClass="btn" />