很难理解您真正在寻找什么,但是如果您不希望在验证失败时提交表单数据,那么您需要将其全部转换为 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我希望这更有意义。