【问题标题】:ASP.NET Add Dynamic HTML w/ UpdatePanel & Web Controls to aspx page. Web Control update other control OnClickASP.NET 将带有 UpdatePanel 和 Web 控件的动态 HTML 添加到 aspx 页面。 Web 控件更新其他控件 OnClick
【发布时间】:2018-04-26 17:35:44
【问题描述】:

我正在尝试添加一系列UpdatePanels,每个都有CheckBox<a> 链接。当我单击链接时,我希望它旁边的对应 CheckBox 也被选中。我可以让 HTML 正确显示,但在获取 UpdatePanel 和控件与后端通信时遇到问题。

我有一个主母版页,主页内有第二个母版页,然后是我在子母版页内使用的内容页。我的主页上有一个带有EnablePartialRendering="True" 的ScriptManager。

我收到此错误:asp.net CS1061 这基本上意味着我的控件没有在后面的代码中找到我的函数

我为包含 UpdatePanel 而创建的这些部分的数量是动态的,并且取决于来自数据库的结果数量。我正在尝试使用 ASP.NETs 功能而不使用 Javascript 来做到这一点

aspx 页面:

<asp:Content ID="aBody" ContentPlaceHolderID="aContent" runat="server">
   <div id="caJumbotron" class="jumbotron aJumbotron" runat="server" >
       <asp:Label ID="auditsTable" runat="server" Text="" />
   </div>
</asp:Content>

aspx.cs:循环内的 HTML 代码

HTML += "<div class='row caSectionRow'>" +
            "<div class='col-md-6'>" +
                "<asp:UpdatePanel runat='server'>" +
                    "<ContentTemplate>" +
                        "<input type='checkbox' class='caCheckbox' name='" + dt.Rows[i]["NAME"].ToString() + "' id='" + dt.Rows[i]["ID"].ToString() + "' value='" + dt.Rows[i]["ID"].ToString() + "' > " +
                        "<a href='' class='caLink' OnClick ='AuditLinkClick' runat='server' >" + dt.Rows[i]["NAME"].ToString() + "</a>" +
                    "</ContentTemplate>" +
                "</asp:UpdatePanel>" +
            "</div>"; //Insert column data

然后在标签内插入动态HTML:

auditsTable.Text = HTML;

我的最后一个问题是......我想让后端的 AuditLinkClick 链接的 OnClick 事件更新 CheckBox 以选中。但是该复选框将具有动态 ID,并且该功能的发送者将是链接。我如何检查与单击的链接相同的 UpdatePanel 中的 CheckBox?

    private void AuditLinkClick(object sender, EventArgs e)
    {
        Response.Write("HERE<br/>");
        //Link is what sent us here
        CheckBox btn = (CheckBox)sender;
        string id = btn.ID;
        btn.Checked = true;
    }

感谢您的帮助!

【问题讨论】:

  • 您正试图通过创建字符串来向页面添加动态控件。那永远行不通。您需要创建 REAL 控件并将它们添加到占位符。
  • 好的。我想我理解并将在不将它们添加为字符串的情况下解决此问题。我曾经尝试过这种方式,但对如何添加 UpdatePanel 感到困惑。因为你加了之后怎么区分UpdatePanel什么时候结束呢?
  • 再一次,也许我应该使用一个 UpdatePanel 并将控件添加到它...
  • 查看herehere如何处理动态控件

标签: c# asp.net dynamic updatepanel master-pages


【解决方案1】:

@VDWWD 在 cmets 中是正确的(谢谢!)。我无法将动态控件作为字符串添加到页面。这就是我所做的以及我如何将其分解:

在前端放一个 UpdatePanelPanel 来保存我添加的所有动态数据:

<asp:UpdatePanel ID="UpdatePanelCheckBoxes" runat="server">
    <ContentTemplate>
        <asp:Panel ID="caPanel" runat="server"></asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel>

在后面的代码中,我通过以下方式添加了每个控件和框架&lt;div&gt;

caPanel.Controls.Add(new LiteralControl("<div class='col-md-6'>"));

CheckBox aCheckBox = new CheckBox();
aCheckBox.ID = dt.Rows[i]["ID"].ToString();
caPanel.Controls.Add(aCheckBox);

Button checkboxButton = new Button();
checkboxButton.ID = "Button"+dt.Rows[i]["ID"].ToString();
checkboxButton.Text = dt.Rows[i]["NAME"].ToString();
checkboxButton.CssClass = "caButton";
checkboxButton.Click += new EventHandler(ALinkClick);
caPanel.Controls.Add(checkboxButton);

caPanel.Controls.Add(new LiteralControl("</div>"));

阻止我早点发现这一点的一件事是我正在使用母版页并且需要使用Panel 来添加控件。我收到错误 [HttpException (0x80004005): Control 'ctl00_TextBox1' of type 'TextBox' must be placed inside a form tag with runat=server.] 直到我使用了Panel。 p>

这个答案有帮助:Control 'ctl00_TextBox1' of type 'TextBox' must be placed inside a form tag with runat=server

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2010-11-28
    • 2010-11-02
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多