【问题标题】:Validation not working when adding query string添加查询字符串时验证不起作用
【发布时间】:2016-02-18 08:14:43
【问题描述】:

当使用response.redirect 或windows.location.href 将查询字符串作为参数传递时从一个页面重定向到另一个页面时,我的验证不起作用。

当我从一个页面重定向到另一个页面时:

<asp:Button ID="New" runat="server" Text="New" OnClientClick="Transfer()" />

 function Transfer() {
        window.location.href = "Abc.aspx?flag=yes"; //when adding query string my validation doesnt work
        //window.location.href = "Abc.aspx";// When removing query string my validation successfully works
    }

然后我从服务器端尝试过这样的:

<asp:Button ID="New" runat="server" Text="New" OnClick="New_Click" />
 protected void btnNewApplicant_Click(object sender, EventArgs e)
        {
            Response.Redirect("Abc.aspx?flag=yes", false); //again not working with this.
        }

当我点击这个 New 按钮时,控制台出现错误:

此错误是否与此选项有关:EnableEventValidation="false",正如您在我的代码中看到的那样?

注意:由于某种原因,我需要将参数作为查询字符串传递。

Abc.aspx:

<%@ Page Title="" Theme="---" Language="C#" MasterPageFile="---" AutoEventWireup="true" CodeBehind="---" EnableEventValidation="false" Inherits="---" %>

     <asp:TextBox ID="txt1" runat="server"></asp:TextBox>
     <asp:RequiredFieldValidator ID="rf1" runat="server" ErrorMessage="require" ForeColor="Red" ControlToValidate="txt1" Display="None" ValidationGroup="validate"></asp:RequiredFieldValidator>

     <asp:TextBox ID="txt2" runat="server"></asp:TextBox>
     <asp:RequiredFieldValidator ID="rf2" runat="server" ErrorMessage="require" ForeColor="Red" ControlToValidate="txt2" Display="None" ValidationGroup="validate"></asp:RequiredFieldValidator>

<asp:Button ID="btnSubmit" runat="server" Text="Save" ValidationGroup="validate" OnClick="btnSubmit_Click" UseSubmitBehavior="true" OnClientClick="checkvalidation()"/> //on click of this i want to perform validation but it is not working.
<telerik:RadCodeBlock ID="radcodeblock1" runat="server" EnableViewState="true">
 <script type="text/javascript">
    function checkvalidation() {
            window.Page_ClientValidate('validate');
            var counter= 0;
            var val= '';
            for (var i = 0; i < window.Page_Validators.length; i++) {
                if (!window.Page_Validators[i].isvalid && typeof (window.Page_Validators[i].errormessage) == "string") {
                    counter= 1;
                    val+= '-  ' + window.Page_Validators[i].errormessage + '<br>';
                }
            }
            if (counter== 1) {
              //My validation pop up to display validations alert because this counter value remains 0 so this part is not executed.
            }
        }
 </script>
</telerik:RadCodeBlock>

现在当我点击提交按钮时,我的服务器端代码事件被触发,但我的验证弹出窗口没有出现。

我什至在 web.config 中加入了这一行:

  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None"></add>

但这仍然不起作用,因为从 response.redirect 或 windows.location.href 中删除查询字符串然后我的验证弹出窗口成功出现并且工作正常。

【问题讨论】:

  • 尝试在页面无效时从按钮客户端单击返回 false。确保在此之前和代码执行期间没有错误。
  • @rdmptn:但问题是我的验证弹出窗口没有触发,因为它不在我的 if 条件中
  • 您的“如果”条件 - 这两个陈述都是假的还是只有一个?
  • 那么唯一合乎逻辑的事情就是记录这个:window.Page_Validators,然后检查它是否是偶数数组以及它包含什么类型的错误。
  • 'window.Page_Validators[i].isvalid' 是真是假? 'typeof (window.Page_Validators[i].errormessage) == "string")' 是真还是假?

标签: javascript c# asp.net validation customvalidator


【解决方案1】:

如果,如您所说,window.Page_Validators[i].isvalid 是 false 并且 typeof (window.Page_Validators[i].errormessage) 是 true,那么我们必须进入“如果”条件。计数器必须设置为 1,然后必须在稍后进入 'if'。

我稍微更改了检查并添加了控制台日志记录来帮助您。如果有人不知道,您可以通过在浏览器中点击F12 并单击“控制台”来查看这些消息。

function checkvalidation() {
        window.Page_ClientValidate('validate');
        var counter= 0;
        var val= '';
        for (var i = 0; i < window.Page_Validators.length; i++) {
            if ( (window.Page_Validators[i].isvalid === false) && typeof (window.Page_Validators[i].errormessage) == "string") {
                console.log("Inside the if condition");
                console.log(window.Page_Validators[i]);
                counter = 1;
                val+= '-  ' + window.Page_Validators[i].errormessage + '<br>';
            }
        }
        if (counter === 1) {
          //My validation pop up to display validations alert because this counter value remains 0 so this part is not executed.
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多