2

我有一个带有复选框和几个文本框的 ASP.NET 页面。

当用户取消勾选复选框时,我需要进行一系列检查并告知用户结果。我通过复选框自动回发属性对回发进行这些检查:

<asp:CheckBox ID="chkDecision" runat="server" AutoPostBack="true" />

我实施的另一条业务规则是,当未选中复选框并且用户开始输入其中一个文本框时,我必须自动勾选复选框。我正在通过 Javascript 执行此操作:

<asp:TextBox ID="txtLeft" runat="server" CssClass="textboxstandard" MaxLength="50" onkeyDown="SelectDecision(event);">

function SelectDecision(e) {
        if (!checkSpecialKeys(e)) {
            var chkDec = $get('<%=chkDecision.ClientID %>');
            if (!chkDec.checked) {
                chkDec.checked = true;
            }                
        }
    }

以上所有工作正常。

我遇到的这个问题是,当用户开始在框中输入时,复选框会打勾。如果他们随后手动取消选中该框,则回发不会触发。

这大概是因为复选框处于与加载页面时相同的状态,因此某些内部逻辑认为回发是不必要的。

如何执行上述场景中提到的服务器端检查?

最终确定 感谢下面提供的帮助,在测试提供的答案期间,我自己能够进一步推进这一点。我发现我可以AutoPostBack在文本框上设置属性:

<asp:TextBox ID="txtLeft" runat="server" CssClass="textboxstandard" MaxLength="50" onkeyDown="SelectDecision(event);" AutoPostBack="true"></asp:TextBox>

在我的场景中,虽然实现了与以下相同的事情,但我发现它更有用,因为在完成编辑后会发生回发。感谢你的帮助!

4

2 回答 2

2

服务器不会理解客户端的更改。你可以为checkedchange事件编写javascript。

您应该执行以下操作,此功能检查和取消选中复选框并触发服务器端自动回发

<script type="text/javascript"> 
        function SelectDecision() { 


            var chkDec = $get('<%=chkDecision.ClientID %>');                  

            //For checking or unchecking the checkbox. 
            if (chkDec .checked) { 
                chkDec .checked = false; 
            } 
            else { 
                chkDec .checked = true; 
            } 


            //For firing the click event. 
            if (document.createEventObject) { 
                // dispatch for IE 
                var evt = document.createEventObject(); 
                return element.fireEvent('on' + 'click', evt) 
            } 
            else { 
                // dispatch for firefox + others 
                var evt = document.createEvent("HTMLEvents"); 
                evt.initEvent('click', true, true); // event type,bubbling,cancelable 
                return !element.dispatchEvent(evt); 
            } 
        } 
    </script>

更多信息:http ://forums.asp.net/t/1445241.aspx/1/10

于 2012-09-28T05:48:15.977 回答
1

您可以使用:

function SelectDecision(e) {
    if (!checkSpecialKeys(e)) {
        var chkDec = $get('<%=chkDecision.ClientID %>');
        if (!chkDec.checked) {
            chkDec.checked = true;
            __doPostBack('<%=chkDecision.ClientID %>', '');
        }                
    }
}
于 2012-09-28T08:27:14.627 回答