当另一个UpdatePanel刷新时,通过触发器刷新UpdatePanel,因为第一个UpdatePanel必须具有UpdateMode=Conditional。

3
我在asp.net页面中有一些updatepanels。当updatepanel 1刷新时,我希望updatepanel 2也能刷新,但是UpdatePanel 2的UpdateMode属性被设置为Conditional,ChildrenAsTrigger=False,因为它内部还有其他的updatePanels,我需要控制它的刷新方式。我试图为另一个updatepanel创建一个触发器,但似乎不起作用,也许我错过了什么。
有没有办法实现这个功能?
如果您无法想出一个有效的示例,请想象产品类别列表和产品列表,当所选类别更改(updatepanel中的linkbutton)时,产品列表(位于另一个updatepanel中)将被刷新,例如按价格排序(排序在另一个updatepanel中),而我不希望类别列表被刷新。
提前致谢。
2个回答

4

您可以在页面的代码后台文件中调用updatePanelProdList.Update()。在您的场景中调用此方法的位置应该是类别更改LinkButton的事件处理程序。


如果理解得好,这似乎很有趣,但在页面事件处理完成后,会导致另一个对updatepanelProductList进行postback更新。我的意思是,当第一个linkbutton事件引发postback时,updatepanel被呈现在页面上,然后进行另一个postback以更新updatepanelprodList。有没有避免这两个postbacks的方法? - dev-cu
只有一个回发。您选择一个类别,然后发生回发。在事件处理程序(服务器端)中,您调用Update。唯一发生的事情是告诉ASP.NET它应该重新呈现UpdatePanel。不会发生额外的回发。 - Ronald Wildenberg

0

谢谢,这就是我要找的!我的页面上有两个“更新面板”,一个用于保存表单,另一个用于保存flexiGrid(非 .net 版本,纯 jQuery)。

我从我的表格手动进行异步回传,以进入编辑或删除模式。

function doPostBackAsync(eventName, eventArgs) {
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    if (!Array.contains(prm._asyncPostBackControlIDs, eventName)) {
        prm._asyncPostBackControlIDs.push(eventName);
    }

    if (!Array.contains(prm._asyncPostBackControlClientIDs, eventName)) {
        prm._asyncPostBackControlClientIDs.push(eventName);
    }
    __doPostBack(eventName, eventArgs);
}

<a title="Edit" href="javascript:doPostBackAsync('Edit','2');">Edit</a>

然后我像这样处理它

string EventName = Request.Form["__EVENTTARGET"].ToString();
int EventValue = Request.Form["__EVENTARGUMENT"].ToString();

在确定了事件名称和事件值之后,调用以下方法

protected void Edit(int id)
{
    //load the form here
    UpdatePanel1.Update(); //do the trick right, without this line unable to show form fields and other stuff with newly loaded data
}

问候。

(对我的英语感到抱歉)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接