【问题标题】:Linkbutton not rendering correctly inside a custom web control链接按钮无法在自定义 Web 控件中正确呈现
【发布时间】:2010-08-05 09:08:34
【问题描述】:

我有以下设置

自定义控件 1 - MyListControl - MyListItemControl 的嵌套集合

MyListItemControl 继承自 Panel,所以我可以这样写:

<cc1:MyListControl ID="MyListControl1" runat="server">
   <ListItems>
      <cc1:MyListItemControl ID="MyListItemControl1" runat="server" CustomProperty="1">
          <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">Edit</asp:LinkButton>
      </cc1:MyListItemControl>
    </ListItems>
</cc1:MyListControl>

我没有收到任何错误,并且控件确实呈现,只是不正确。上面的代码如果放在 Formview 中,链接按钮不会得到所有被渲染的 PostBack 脚本

<a id="LinkButton1">Edit</a>

有谁知道为什么会发生这种情况并且链接按钮没有像往常一样呈现?

TIA

安德鲁

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    对我来说,这看起来像是 ASP.Net 中的一个错误,它与父控件集合中的 LinkBut​​ton 顺序有关。

    这个sn-p:

        protected override void OnLoad(EventArgs e)
        {
            // show some data
            _l = new Label();
            _l.Visible = false;
            _l.Text = "Current Web's Url: " + SPContext.Current.Web.Url;
            Controls.Add(_l);
    
            // add a button with some processing
            _lb = new LinkButton();
            _lb.Text = "Click here";
            _lb.Click += new EventHandler(_lb_Click);
            Controls.Add(_lb);
        }
    

    生成此 HTML:

    <span id="ctl00_PlaceHolderMain_ads1"><h1>This is a custom control</h1><span>Current Web's Url: http://arielki03:9999/sites/ads</span><a href="javascript:__doPostBack('ctl00$PlaceHolderMain$ctl01','')">Click here</a></span>
    

    但是这个 sn-p(只是颠倒了我在上面添加控件的顺序,所以 LinkBut​​ton 是第一个):

        protected override void OnLoad(EventArgs e)
        {
            // add a button with some processing
            _lb = new LinkButton();
            _lb.Text = "Click here";
            _lb.Click += new EventHandler(_lb_Click);
            Controls.Add(_lb);
    
            // show some data
            _l = new Label();
            _l.Visible = false;
            _l.Text = "Current Web's Url: " + SPContext.Current.Web.Url;
            Controls.Add(_l);
        }
    

    不显示任何控制!!!

    问题似乎在于 LinkBut​​ton 是父控件集合中的第一个。解决方法:在它之前添加一个空标签,它会工作:-)

    【讨论】:

      【解决方案2】:

      您是否在生成的 html 的其他地方遇到了一些 ID 名称冲突?

      控件应该具有 LinkBut​​ton1 名称的错位版本,因为它位于中继器中?

      【讨论】:

      • 附言。您所说的 Mangled 版本是一个层次结构,用于在 INamingContainer(如中继器)内部时赋予 ID 唯一性。我没有使用中继器控件??
      • 抱歉,我从 MyListControl / MyListItemControl 暗示了这一点?这适用于默认列表控件吗?
      【解决方案3】:

      我意识到这有点过时了,但我只是遇到了同样的问题并在我的情况下解决了它。希望这可以帮助遇到这个问题的其他人。

      我的问题是我没有将 LinkBut​​ton 添加到我的服务器控件(LinkBut​​ton 的父控件)的 Controls 集合中。我没有深入研究导致问题的原因。

      祝你好运。

      【讨论】:

        【解决方案4】:

        我可以报告这仍然是 ASP 4 中的一个问题。非常烦人。今天我发现了这个问题,因为一位同事向母版页添加了一个自定义控件,导致所有 LinkBut​​tons 的副作用悄悄地不再像链接或按钮一样起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-29
          • 2012-11-09
          • 2011-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-16
          • 1970-01-01
          相关资源
          最近更新 更多