在JavaScript中测试Button1_Click是否有效后,尝试阻止其提交数据。尝试了很多次,但是无论我在函数中返回什么,它都会提交。
<form runat="server">
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" OnClientClick="return testValidate();" />
</form>
Button1_Click是一个c#函数,当前仅在被调用时提醒我-编辑
我的Javascript函数:
function testValidate() {
return false;
}
我尝试了一些建议的解决方案,例如使用OnClientClick =“ if(!testValidate())return
假;”
但是这些都不起作用
感谢您的提前帮助
答案 0 :(得分:1)
很难理解您真正在寻找什么,但是如果您不希望在验证失败时提交表单数据,则需要将其全部转换为JavaScript并设置ajax调用(这需要删除或OnClick事件),或在C#代码函数中进行所有验证,然后可以使用布尔值确定是否提交数据。
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()
一个完成运行的机会,因为return false;
立即返回false。
为避免立即返回,请尝试仅使用OnClientClick="var test = testValidate(); setTimeout(function() { return test; }, 10);"
。或者,您可以将超时时间限制(在本示例中为10)置于毫秒内,以使返回仅在函数完成并且测试具有值之后才发生。或者,您可以只执行OnClientClick="testValidate();"
,它将在调用testValidate()之后将其作为布尔值进行评估,这将允许调用函数中的return false;
并返回false
。我希望这更有意义。
答案 1 :(得分:1)
代替
OnClientClick="return testValidate();"
只写
OnClientClick="testValidate();"