如何使OnClick在ASP.NET中的OnClientClick之后执行
本文关键字:中的 OnClientClick 之后 执行 NET ASP 何使 OnClick | 更新日期: 2023-09-27 18:19:46
我正在C#中开发一个ASP.NET web表单应用程序。我有一个按钮,它需要运行一些客户端Javascript(使用OnClientClick属性),然后如果客户端代码返回true,则运行服务器端代码(使用OnClick)。我以前用jQueryui确认对话框做过很多次,但这次我的客户端代码不是确认对话框,它也不起作用——即使我明确返回true,服务器端(OnClick)事件也不会被触发。
以下是有问题的客户端代码,它正在工作(我已经通过alert()调用验证了它是否返回了正确的值):
<script type="text/javascript">
//Function to hide edit fields
function hideEditFields(retVal) {
//Hide all edit divs
var editName = document.getElementsByClassName("editField");
for (i = 0; i < editName.length; i++) {
editName[i].style.display = 'none';
}
//Show all view divs
var viewName = document.getElementsByClassName("viewField");
for (i = 0; i < viewName.length; i++) {
viewName[i].style.display = 'block';
}
//Make investigated & corrective action checkboxes non-highlighted
$('<%=cbInvestigatedY.ClientID%>').removeClass("editable");
$('<%=cbInvestigatedN.ClientID%>').removeClass("editable");
$('<%=cbCorrectiveY.ClientID%>').removeClass("editable");
$('<%=cbCorrectiveN.ClientID%>').removeClass("editable");
//Show edit button
var editButton = document.getElementById("editButton");
editButton.style.display = 'block';
//Hide save button
var saveButton = document.getElementById("saveButton");
saveButton.style.display = 'none';
//alert("returning " + retVal);
return retVal;
}
</script>
这是调用这个功能的按钮:
<asp:Button ID="btnSaveChanges" runat="server" OnClientClick="return
hideEditFields(true);" OnClick="btnSubmit_Click" Text="Save Changes" />
我已经尝试过使用UseSubmitBehavior="true"
和不使用,这似乎没有什么区别。我在Javascript控制台中没有得到任何错误,Javascript代码正在做它应该做的事情,只是没有调用服务器端方法。
以下是ASP.NET如何呈现提交按钮(在视图源中):
<input type="submit" name="ctl00$MainContent$btnSaveChanges" value="Save Changes"
onclick="return hideEditFields(true);WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions("ctl00$MainContent$btnSaveChanges", "",
true, "", "", false, false))"
id="ctl00_MainContent_btnSaveChanges" />
Pleasea尝试在客户端单击中从调用中删除return
。我认为你应该这样调用函数onclientclick
:
<asp:Button ID="btnSaveChanges" runat="server" OnClientClick="hideEditFields('true');" Text="Save Changes" onclick="btnSubmit_Click" />
真正的问题是我的服务器端方法正在执行,但什么也没做,因为它将表单中的原始值(存储为隐藏字段)与表单文本框和其他控件中输入的新值进行比较,并在它们更改时存储它们。但我犯了一个错误,没有在检查IsPostBack(,我更清楚!)时附上填充表单的代码,所以比较总是相等的,所以没有什么变化。请参阅内容发生更改时,ASP.NET为什么要提交TextBox控件的原始值?了解更多详细信息。
在客户端单击时,将返回值设置为true:
btnTest.OnClientClick =
"window.open('" + URL + "');
return true;";