【问题标题】:ASP.NET - Call javascript validation function before submitting formASP.NET - 在提交表单之前调用 javascript 验证函数
【发布时间】:2013-09-12 19:54:03
【问题描述】:

我需要在我们网站的表单中实施一些第 3 方字段验证。目前,我们的表单字段的验证是通过使用 ASP.NET 验证器(必需的,正则表达式)完成的,我想在我们不会使用新验证的字段上继续使用这些。为我们提供新验证服务的公司为我们提供了所有代码以集成到我们的网站中以获得新的验证功能,而基本实现只需要我们调用一个 javascript 方法来读取指定字段的值并通过验证它们几个服务电话。此外,该实现要求表单最初具有onsubmit="return false;" 属性集。

我遇到的问题是验证脚本尝试提交表单时(在验证后函数删除表单的 onsubmit 属性之后),因为事件验证已打开(不是关闭选项) ,页面抛出异常“无效的回发或回调参数”。也许我提供了过多的细节来提供上下文,但问题可能归结为:如果启用了事件验证而不会导致此错误,您能否使用 javascript 提交 ASP.NET 表单?如果有,怎么做?

【问题讨论】:

    标签: javascript asp.net forms


    【解决方案1】:

    您可以在 JavaScript 函数中调用回帖,如下所示:

    <script type="text/javascript">
        function DoValidation(parameter)
        {
            // Do calls to validation services here
    
            // If all validation passes, then call this
            if(valid) {
                __doPostBack('btnSave', parameter)
            }
        }
    </script>
    
    <asp:Button id="btnSave" runat="server" OnClientClick="DoValidation()" 
                Text="Save" />
    

    注意:btnSave 是一个虚构的名称,但它应该代表通常执行回发的服务器端控件。

    现在,在您页面的 Page_Load 事件中,您可以确定是谁发起了回帖以及随它发送的任何数据,如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        // Get the control that caused the post back (btnSave)
        Request["__EVENTTARGET"];
    
        // Get the parameter value (parameter)
        string parameter = Request["__EVENTARGUMENT"];
    }
    

    【讨论】:

    • 感谢您的建议,但是,我仍然收到错误消息。如果有帮助,这是错误消息中的堆栈跟踪:System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +206 System.Web.UI.WebControls.HiddenField.LoadPostData(String postDataKey, NameValueCollection postCollection) +62 System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +507 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2071
    • 我会接受这个答案。我必须进行验证,但验证脚本可能会以导致错误的方式更改页面的控件集合。我已经单独测试过了,是的,它可以在其他地方工作。我将不得不继续与该机构合作以解决我的具体问题。感谢您的帮助。
    • 我已经验证了上述评论中的假设是正确的。在我深入研究了提供给我们的代码后,我发现这就是罪魁祸首:$("input[type='hidden']").val(""); 可以做到。 :^)
    • @meandthemoon - 太好了,很高兴它对你有用。如有可能,请随意对答案进行投票。 :-)
    【解决方案2】:

    是的,你可以。像这样的东西,请多多包涵,这只是伪代码。

    <header>
    <script type="text/javascript">
        function JavaScriptSave()
        {
            // Validations here
    
            if(passed)
            {
                __doPostBack('<%=MyButton.ClientID %>','OkToSave');
            }
        }
    </script>
    </header>
    
    <asp:button id="MyButton" runat="server" Text="Submit Button" OnClientClick="JavaScriptSave()" />
    

    然后在背面:

    protected void Page_Load(object sender, EventArgs e)
    {
        string passedInValue = Request["__EVENTARGUMENT"];
        if(passedInValue = "OkToSave")
        {
            // perform save function here
        }
        ...
        if(IsPostBack)
            return;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 2014-12-11
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多