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

时间:2013-06-25 14:38:13

标签: c# javascript asp.net

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

3 个答案:

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