簡體   English   中英

Javascript可以在UserControl中禁用ASP.Net控件嗎?

[英]Can Javascript disable an ASP.Net Control inside a UserControl?

Javascript可以在UserControl中禁用ASP.net控件嗎? 我的Javascript文件是從MasterPage調用的,我也是從ContentPage中嘗試過的。

我試圖使用Javascript作為空閑計時器來減少服務器回發而不記錄用戶。 當用戶回到焦點窗口時,計時器重新啟動並再次刷新,直到用戶空閑30分鍾並暫停ASP.Net計時器。

使用Javascript:

var timer = $find('<%= TimerAutoRefresh.ClientID %>');
if (timer) {
    //stop the timer
    timer._stopTimer();
    timer.set_enabled(false);
    console.log("Timer disabled: " + timer);
}

ASP.net ASCX

<asp:UpdatePanel ID="UpdatePanel" runat="server">
    <ContentTemplate>
        <asp:Timer ID="TimerAutoRefresh" runat="server" Interval="5000" Enabled="true"></asp:Timer>
<asp:Literal ID="LiteralTest" runat="server">Timestamp</asp:Literal>
    </ContentTemplate>
</asp:UpdatePanel>

我已經嘗試了$ find和document.getElementById並且無法獲取ID。 當我使用ClientIDMode="Static" ,頁面無法每5秒刷新一次,因為它完成了回發。

首先,使用UpdatePanel仍會導致頁面執行完整的PostBack,但只有更新的部分再次發送到瀏覽器,因此不會減少服務器負載。 其次,您不能像這樣訪問Timer Control。

但為什么不讓它變得更簡單呢? 如果您確實希望保持用戶登錄,那么為什么不對某個URL執行Ajax請求以保持會話處於活動狀態。

<script>
    var timer;
    var interval = 2500;

    function startTimer() {
        timer = setInterval(function () {
            $.ajax({
                type: 'GET',
                url: 'Default.aspx'
            });
        }, interval); 
    }

    function stopTimer() {
        clearInterval(timer);
    }

    startTimer();
</script>

有關jQuery計時器的更多信息: 使用javascript,jQuery啟動和停止/暫停setInterval

但是您也可以增加apsnet注銷用戶所需的超時時間。

如何在asp.net中增加會話超時?

或者使用持久性cookie登錄用戶。 通常在登錄時,您會看到一個復選框“讓我登錄”或“記住我”或類似的東西。

如何在asp.net中創建持久性cookie?

UPDATE

每5秒更新500kb每個用戶似乎是一個壞主意,有或沒有UpdatePanels。 但這是一種從前端停止計時器的方法。

<asp:UpdatePanel ID="UpdatePanel" runat="server">
    <ContentTemplate>
        <asp:Timer ID="TimerAutoRefresh" runat="server" Interval="5000" Enabled="true" OnTick="TimerAutoRefresh_Tick"></asp:Timer>
        <asp:Literal ID="LiteralTest" runat="server">Timestamp</asp:Literal>
        <asp:HiddenField ID="HiddenField1" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

<button id="StopTimer">Stop Timer</button>

<script>
    $('#StopTimer').bind('click', function (e) {
        $('#<%= HiddenField1.ClientID %>').val('Stop!');
        e.preventDefault();
    });
</script>

然后在代碼背后

protected void TimerAutoRefresh_Tick(object sender, EventArgs e)
{
    LiteralTest.Text = DateTime.Now.ToString();

    if (HiddenField1.Value == "Stop!")
    {
        LiteralTest.Text = "Stopped";
        TimerAutoRefresh.Enabled = false;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM