ASP.NET - 在提交表单之前调用 javascript 验证函数

ASP.NET - Call javascript validation function before submitting form

本文关键字:调用 javascript 验证 函数 表单 NET 提交 ASP      更新时间:2023-09-26

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

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

你可以在 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"];
}

是的,你可以。像这样的东西,请耐心等待,这只是伪代码。

<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;
}