1

试图阻止我的 Button1_Click 在测试其在 javascript 中是否有效后提交我的数据。已经尝试了很多次,但无论我在函数中返回什么,它都会提交。

<form runat="server">
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" OnClientClick="return testValidate();" />
</form>

Button1_Click 是 ac# 函数,目前仅在调用时提醒我 - 编辑

我的 Javascript 函数:

function testValidate() { 
return false;
}

我尝试了一些建议的解决方案,例如使用 OnClientClick="if (!testValidate()) return
false;"

然而这些都没有奏效

感谢您提前提供帮助

4

2 回答 2

1

代替

OnClientClick="return testValidate();"

写吧

OnClientClick="testValidate();"

于 2018-07-09T16:58:38.860 回答
1

很难理解您真正在寻找什么,但是如果您不希望在验证失败时提交表单数据,那么您需要将其全部转换为 JavaScript 并设置一个 ajax 调用(这将需要删除 OnClick 事件),或者在 C# 代码函数中进行所有验证,然后您可以使用 bool 来确定是否提交数据。

一个 JavaScript 示例:

function testValidate() { 
    var is_valid = false;
    // Do validation code
    if(is_valid) {
        $..ajax({
           url: //URL location of your webservice,
           method: 'POST',
           contentType: "application/json; charset=utf-8",
           dataType: 'json',
           data: //Form data,
           success: function (data) {

           },
           error: function (data, text, error) {
              alert(error);
           }
        });
     }
}

网络服务方法

[WebMethod]
public void SubmitData(/*Lay out all parameters here*/) 
{
     //Insert form data
}

在 OnClick 中完成所有操作。(需要删除 OnClientClick,因为它不再需要)

前面:

<form runat="server">
    <asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
</form>

C#:

protected void Button1_Click(object sender, EventArgs e) 
{
     bool isValid = false;
     // Do validation
     if(isValid)
     {
         // submit form data
     }
}

如果我误解了您正在寻找的内容,我提前道歉,如果我现在给出的内容不符合您的需求,我愿意修改我的答案。如果这不是您要查找的内容,请澄清您的问题。谢谢!

编辑:

这就是为什么OnClientClick="return false;"OnClientClick="return testValidate();"不同。

JS 将在它看到 return 语句的第二秒返回,而不管代码是否完成执行。所以return testValidate();执行一个函数调用并立即返回,没有testValidate()机会完成运行,其中 asreturn false;立即返回 false。

为避免立即返回,请尝试仅使用OnClientClick="var test = testValidate(); setTimeout(function() { return test; }, 10);". 或者,您可以在超时时间限制(本例中为 10)内设置任意时间(以毫秒为单位),以允许仅在函数完成且 test 有值时返回。或者您可以在OnClientClick="testValidate();"调用 testValidate() 后将其评估为布尔值,这将允许调用并返回return false;您的函数。false我希望这更有意义。

于 2018-07-09T16:46:53.810 回答