我正在使用C#开发一个ASP.NET Web Forms应用程序。我有一个按钮,需要在客户端运行一些Javascript代码(使用OnClientClick属性),然后如果客户端代码返回true,则运行服务器端代码(使用OnClick)。我以前用过jQuery-UI确认对话框多次完成这个操作,但是这次我的客户端代码不是确认对话框,而且它没有起作用——尽管我明确地返回了true,但服务器端(OnClick)事件从未被触发。
以下是相关的客户端代码,它是有效的(通过alert()调用验证了它返回的正确值):
我已经尝试了使用
以下是ASP.NET呈现提交按钮的方式(在视图源代码中):
以下是相关的客户端代码,它是有效的(通过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" />
return
,无论是true还是false,都不会执行onclick的其余部分。这就是为什么那些.NET函数调用不能正确设置提交行为,以便服务器可以知道触发器的原因。 - Ian