【问题标题】:How to update an UpdatePanel with a trigger control from outside of it如何从外部使用触发器控件更新 UpdatePanel
【发布时间】:2014-08-12 20:49:01
【问题描述】:

我在UpdatePanel 之外有以下按钮,我想用它来更新:

<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="btnExport" ClientIDMode="Static" UseSubmitBehavior="false" OnClick="SubmitAdminMessage" />

<asp:UpdatePanel ID="upMessages" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Label ID="lblMessage" runat="server" Text="" ClientIDMode="Static"></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{
    upMessages.Triggers.Add(new AsyncPostBackTrigger()
    {
        ControlID = btnSubmit.UniqueID,
    });

    PopulateMessageGV(); //this displays the message on refresh of the page
}

protected void SubmitAdminMessage(object sender, EventArgs e)
{
    var hostWeb = Page.Request["SPHostUrl"];

    using (var context = new ClientContext(hostWeb))
    {
        var hostSite = context.Web;
        context.Load(hostSite, s => s.Title);
        context.ExecuteQuery();

        var allLists = hostSite.Lists;
        var messageList = allLists.GetByTitle("AdminMessage");
        var itemCreationInformation = new ListItemCreationInformation();
        var newMessage = messageList.AddItem(itemCreationInformation);
        newMessage["Message"] = tbMessage.Text;
        newMessage["Active"] = cbIsActive.Checked.ToString();
        newMessage.Update();

        context.ExecuteQuery();
    }
}

以下函数在页面刷新时更新消息:

protected void PopulateMessageGV()
{
    Microsoft.SharePoint.Client.ListItemCollection filteredItems = null;
    var hostWeb = Page.Request["SPHostUrl"];

    using (var context = new ClientContext(hostWeb))
    {
        var hostSite = context.Web;
        context.Load(hostSite, s => s.Title);
        context.ExecuteQuery();

        var allLists = hostSite.Lists;
        var messageList = allLists.GetByTitle("AdminMessage");
        context.Load(messageList);
        context.ExecuteQuery();
        MessageListCountLabel.Text = messageList.ItemCount.ToString();
        ListUrlHyperLink.NavigateUrl = hostWeb + "/Lists/AdminMessage";
        try
        {
            var query = CamlQuery.CreateAllItemsQuery();
            var allItems = messageList.GetItems(query);
            context.Load(allItems);
            context.ExecuteQuery();
            foreach (var item in allItems)
            {
                DataTable dt;
                if (item["Active"].ToString() == "True")
                {
                    msItem.Add(item["Created"].ToString() + " " + item["Message"].ToString());
                }
            }
            msItem.ToArray();
            foreach (var list in msItem)
            {
                lblMessage.Text += list + "<br />";
            }
            upMessages.Update();
        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }

        try
        {
            var query = new CamlQuery();
            var camlViewXml = string.Format(@"<View><Query><Where><Eq>
                <FieldRef Name='Active'/><Value Type='Boolean'>
                {0}</Value></Eq></Where>
                </Query></View>", "False");
            query.ViewXml = camlViewXml;
            filteredItems = messageList.GetItems(query);
            context.Load(filteredItems, items => items.Include(
            item => item["ID"], item => item["Created"],
            item => item["Message"]));
            context.ExecuteQuery();
        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }
    }
}

如何修改我的代码,以便在按下提交按钮时更新lblMessage 而无需刷新页面?

【问题讨论】:

    标签: c# asp.net gridview updatepanel


    【解决方案1】:

    你可以像这样使用外部触发器

    <asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="btnExport" ClientIDMode="Static" UseSubmitBehavior="false" OnClick="SubmitAdminMessage" />
    
    <asp:UpdatePanel ID="upMessages" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnSubmit" EventName="Click" />
        </Triggers>
        <ContentTemplate>
            <asp:Label ID="lblMessage" runat="server" Text="" ClientIDMode="Static"></asp:Label>
        </ContentTemplate>
    </asp:UpdatePanel>
    

    注意Triggers 部分

    【讨论】:

    • 我必须以某种方式致电PopulateMessageGV,因为btnSubmit 只是添加数据?
    • 我收到此错误:Exception Details: System.InvalidOperationException: A control with ID 'btnSubmit' could not be found for the trigger in UpdatePanel 'upMessages'. 我之前已经尝试过,但不幸的是没有工作:/
    • @SearchForKnowledge:如果标记与您显示的完全一样,它应该可以工作。您可能正在简化这里的代码...
    • 代码应该是这样的:/。我刚刚检查了另一个问题,它说我需要将按钮添加到它自己的 UpdatePanel?
    • @SearchForKnowledge:距离我上次使用UpdatePanel 已经很久了。试一试,告诉我进展如何:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2020-03-17
    • 2013-07-26
    相关资源
    最近更新 更多