【问题标题】:ASP.NET Control Render PipelineASP.NET 控件渲染管道
【发布时间】:2009-06-23 09:04:42
【问题描述】:

我正在构建的寻呼机控件存在问题。我的代码如下

protected override void CreateChildControls()
{
  base.CreateChildControls();

  pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" };
  Controls.Add(ddl);

  AddPagerControls();
}

AddPagerControls 添加了一堆使用相同事件处理程序的 LinkBut​​tons:

private void li_Click(object sender, EventArgs e)
{
  selectedValue = ((LinkButton) sender).CommandArgument;
  AddPagerControls();
}

现在发生的情况是,当我添加“下一个”链接按钮时,它会使用以下命令正确设置 CommandArgument:

var liNext = new LinkButton {ID = "NewsPagerLinkNext", Text = ">", CommandArgument = (int.Parse(value) + 1).ToString()};
liNext.Click += new EventHandler(li_Click);
pnl.Controls.Add(liNext);

即如果当前页面为 2,则调试代码时“Next”按钮的 CommandArgument 将为 3。 但是,当页面呈现并且我单击下一个按钮时,它会工作一次(从第 1 页到第 2 页),但它始终是 2,即使在代码中它设置为 3。所以当控制时必须发生一些事情被渲染。

我在这里有点不知所措。我尝试将 CreateChildControls 中对 AddPagerControls 的调用更改为 if(!Page.IsPostBack){AddPagerControls();} 但事件处理程序根本不会触发。

编辑: P.S.我在从事件处理程序调用 AddPagerControls 方法时执行 pnl.Controls.Clear(),否则 LinkBut​​tons 将被添加两次。

编辑:P.P.S.我重新计算每次要添加哪些链接按钮,因为如果存在更多页面,我只需要显示 5 个链接,即

>>

【问题讨论】:

    标签: c# asp.net controls rendering pipeline


    【解决方案1】:

    我不明白为什么你总是重新生成分页控件。难道你不能只使用一种方法,你有你的链接按钮“上一个”和“下一个”,你在你的控件的视图状态(作为单独的属性)中维护正在查看的当前页面和项目的数量(即页面大小)?

    然后在事件处理程序中执行正确的操作,因为您知道当前页面将类似于 currentPageIndex+1 或类似的东西。从我的角度来看,始终重新生成上一个/下一个按钮,尤其是在 li_Click 处理程序中不是一个好方法,这也可能导致您的问题。

    【讨论】:

    • 已经尝试过了,即使 liNext LinkBut​​ton 始终存在,在需要时使其可见并且仅在事件处理程序中设置 CommandArgument 会导致相同的结果,我可以单击任何链接一次,然后它停止工作,就好像控件在控件树或其他东西之外(不可能,我知道......)
    • 带有“停止工作”的意思是没有调用事件处理程序吗?
    • 不完全是,我的意思是上一个/下一个链接将始终保持点击一次后获得的值,任何数值也是如此。寻呼机在 sharepoint 中用于对使用 ObjectDataSource 的 DataFormWebPart 进行寻呼。这就是这个控件需要“包罗万象”的原因,即从一个自包含的数据源呈现自己。我认为问题在于数字链接应该在点击其中一个链接后发生变化,即控制树发生变化,但这些变化并未呈现在页面中......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多