在没有AutoPostBack

时间:2016-07-26 17:23:38

标签: c# asp.net textbox

我有一个用户可以输入注释的文本框,然后单击“保存”。当他们单击“保存”时,某些代码会在后台执行,但是他们的注释会保留在文本框中,以便他们可以看到它们。我想在单击“保存”时显示“已保存注释”框的上方显示一些文本,以便他们知道他们的请求已完成,因为单击“保存”后页面上没有任何其他更改。但是,他们可以更改文本框中的文本,除非再次单击“保存”,否则不会保存。所以,如果他们更改框中的文本,我希望“已保存注释”文本消失。但是,我无法设置AutoPostBack="true",因为它会弄乱页面上发生的其他一些事情。有没有办法让文本框更改时“注释已保存”文本消失,而无需重新加载页面?这是我到目前为止的代码:

<div id="savedMsg" runat="server"><p class="msgAlert"> Comments Saved! </p></div>
<div>
    <asp:Panel runat="server" DefaultButton="Save">
        <asp:TextBox runat="server" ID="TextBox" CssClass="form-control" TextMode="MultiLine"/>
    </asp:Panel>
</div>

这是背后的代码:

protected void SaveComments(object sender, EventArgs e)
{
    //some code here that is unrelated
    savedMsg.Visible = true;
}

理想情况下,我会设置TextChange="SomeMethod"并将其包含在我的代码中:

protected void SomeMethod(object sender, EventArgs e)
{
    savedMsg.Visible = false;
}

但我无法启用AutoPostBack,因此此事件永远不会发生。

1 个答案:

答案 0 :(得分:1)

您可以在TextBox的onkeydown事件中隐藏消息:

<asp:TextBox runat="server" ID="TextBox" onkeydown="hideSaveMessage();" CssClass="form-control" TextMode="MultiLine" />

使用Javascript代码:

<script type="text/javascript">
    function hideSaveMessage() {
        var div = document.getElementById('<%= savedMsg.ClientID %>');
        div.style.visibility = 'hidden';
    }
</script>

您也可以使用div.style.display = 'none'隐藏消息,但这会导致TextBox“跳转”到新位置,这有点令人不安。

我使用document.getElementById('<%= savedMsg.ClientID %>')来说明ASP.NET对div ID应用的任何修改。更简单的语法document.getElementById('savedMsg')可能适用于您的情况。