你不能用 UpdatePanel 做到这一点。UpdatePanel 会自动连接所有的帖子数据,包括视图状态,以及后面的代码。
您不能只获得一个 UpdatePanel 就运行后面的代码,必须运行整个循环。
你可以做什么
您可以通过检查请求是否来自同一个 UpdatePanel 来避免在某些函数后面运行代码。
例如,假设您有 4 个更新面板,并且更新面板 2 被回发。然后在页面加载的其余更新面板上,您可以执行类似的操作
protected void Page_Load(object sender, EventArgs e)
{
if (IsUpdatePanelInRendering(Page, upUpdatePanelId))
{
// run the code for update panel 1, me
// ...
}
}
其中 IsUpdatePanelInRendering :
public static bool IsUpdatePanelInRendering(Page page, UpdatePanel panel)
{
Debug.Assert(HttpContext.Current != null, "Where are you called ? HttpContext.Current is null ");
Debug.Assert(HttpContext.Current.Request != null, "Where are you called HttpContext.Current.Request is null ");
// if not post back, let it render
if (false == page.IsPostBack)
{
return true;
}
else
{
try
{
// or else check if need to be update
ScriptManager sm = ScriptManager.GetCurrent(page);
if (sm != null && sm.IsInAsyncPostBack)
{
Debug.Assert(HttpContext.Current.Request.Form != null, "Why forms are null ?");
string smFormValue = HttpContext.Current.Request.Form[sm.UniqueID];
if (!string.IsNullOrEmpty(smFormValue))
{
string[] uIDs = smFormValue.Split("|".ToCharArray());
if (uIDs.Length == 2)
{
if (!uIDs[0].Equals(panel.UniqueID, StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
}
}
}
}
catch (Exception x)
{
Debug.Fail("Ops, what we lost here ?");
}
return true;
}
}
相对:
如何限制 UpdatePanel 上的帖子值数量?
如何防止用户控制代码在异步回发中运行?
直接ajax调用
更好但困难的解决方案是删除 UpdatePanel,并使用 ajax 调用手动进行更新。
在这种情况下,您可以使用 jQuery 和部分发送、部分更新页面上的任何内容,以最低的数据发送和操作成本 - 但具有更多的代码和设计。