从已调用的WebMethod更新UpdatePanel

时间:2013-04-02 18:49:22

标签: c# jquery asp.net updatepanel webmethod

我有这段代码:

<script type="text/javascript" language="javascript">
    $(document).ready(function () {
        $('#refreshDocuments').click(function () {
            var areaId = 42;
            $.ajax({
                type: "POST",
                url: "Test.aspx/TimeTest",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    alert(data.d);
                }
            });
        });
    });
</script>

...................

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Label ID="lblTime" runat="server" Text="Label"></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

................... test.cs中

[System.Web.Services.WebMethod]
    private void TimeTest()
    {
        lblTime.Text = DateTime.Now.ToString();
        UpdatePanel1.Update();``
    }

按下此按钮时会调用TimeTest方法:

<id="refreshDocuments">Test</a>

我的问题是: 如何更新标签以满足我的需求?

谢谢!

1 个答案:

答案 0 :(得分:3)

其实我的意思是一个标签(我的错误)。一直以来,您无法在TimeTest方法中刷新UpdatePanel。此外,此方法必须为public static,以允许从JavaScript中使用jQuery.ajax方法异步调用它。在此处阅读更多内容:Using jQuery to directly call ASP.NET AJAX page methods

您可以做的是使用LinkButton控件并将其注册为UpdatePanel的AsyncPostBackTrigger,并在此LinkBut​​ton的Click事件处理程序中执行所有工作人员

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Label ID="lblTime" runat="server" Text="Label"></asp:Label>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="refreshDocuments" />
    </Triggers>
</asp:UpdatePanel>
<asp:LinkButton runat="server" ID="refreshDocuments" 
    Text="Click Me" OnClick="refreshDocuments_OnClick" />

protected void refreshDocuments_OnClick(object sender, EventArgs e)
{
    //refresh controls in UpdatePanel1
    //UpdatePanel1 will be refreshed automatically
}