在其他updatepanel执行时通过触发器刷新updatepanel,因为第一个必须具有UpdateMode = Conditional

时间:2010-06-29 22:10:27

标签: asp.net updatepanel refresh triggers

我在asp.net页面上有一些updatepanel。我希望updatepanel 2在updatepanel 1执行时刷新,但UpdatePanel 2将其UpdateMode属性设置为Conditional和ChildrenAsTrigger = False,因为它内部有另一个updatePanel,我需要控制刷新的方式。我试图触发其他更新面板,但这似乎不起作用,也许我错过了一些东西

有没有办法让这种情况发生?

如果你无法想出一个有效的例子,想象产品类别列表和产品列表,当选择类别更改(updatepanel内的linkbutton)产品列表刷新,这是在另一个updatepanel内,产品列表更改,例如当你按价格订购时(订单在其他updatepanel内),我不希望类别列表被刷新。

提前感谢。

2 个答案:

答案 0 :(得分:4)

您可以在页面的代码隐藏文件中调用updatePanelProdList.Update()。在您的场景中调用此方法的位置将是类别更改LinkBut​​ton的事件处理程序。

答案 1 :(得分:0)

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

我从网格中手动执行AsyncPostBack以进入编辑或删除模式。

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();

在确定EventName和EventValue之后调用下面的方法

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
}

问候。

(对不起我的英文)