如何使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(&quot;ctl00$MainContent$btnSaveChanges&quot;, &quot;&quot;,
    true, &quot;&quot;, &quot;&quot;, false, false))"
    id="ctl00_MainContent_btnSaveChanges" />

如何使OnClick在ASP.NET中的OnClientClick之后执行

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;";