我正在使用C#编写ASP.NET Web表单应用程序。我有一个按钮,需要运行一些客户端Javascript(使用OnClientClick属性),然后运行服务器端代码(使用OnClick),如果客户端代码返回true。我之前已经使用jQuery-ui确认对话框做了很多次,但这次我的客户端代码不是确认对话框而且它不起作用 - 服务器端(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" />
答案 0 :(得分:4)
请尝试在客户端点击中删除return
。我认为你应该像这样调用函数onclientclick
:
<asp:Button ID="btnSaveChanges" runat="server" OnClientClick="hideEditFields('true');" Text="Save Changes" onclick="btnSubmit_Click" />
答案 1 :(得分:1)
真正的问题是我的服务器端方法 正在执行,但什么也没做,因为它将表单中的原始值(存储为隐藏字段)与输入的新值进行比较表单的文本框和其他控件,如果已更改,则存储它们。但是我正在制造noob错误,因为没有将填写表单的代码包含在IsPostBack的检查中(我知道更好!),因此比较总是相等,所以没有任何改变。有关详细信息,请参阅Why is ASP.NET submitting the original value of a TextBox control when the contents have been changed?。
答案 2 :(得分:-1)
在客户端上单击,将返回值设置为true:
btnTest.OnClientClick =
"window.open('" + URL + "');
return true;";