标签: findcontrol

FindControl和动态创建的控件有问题

示例代码:

    var div = new HtmlGenericControl("div");
    div.Controls.Add(new Literal() { ID = "litSomeLit" });
    var lit = (Literal)div.FindControl("litSomeLit");
    Assert.IsNotNull(lit);
Run Code Online (Sandbox Code Playgroud)

此代码未通过断言,因为lit为null.调试显示div.Controls肯定包含ID为"litSomeLit"的文字.我的问题是"为什么?" 并且"有没有办法获得对特定ID的控制,而不是一次手动一个元素递归搜索div.Controls []?"

我这样做的原因是我的实际应用并不那么简单 - 我正在编写的方法给出了一个复杂的控件,在许多可能的配置中有几个子控件.我需要访问几个层的特定控件(例如,具有ID"txtSpecificControl"的控件可能在StartingControl.Controls[0].Controls[2].Controls[1].Controls[3]).通常我可以这样做FindControl("txtSpecificControl"),但是当控件刚刚动态创建时(例如上面的示例代码中),这似乎不起作用.

c# asp.net dynamic findcontrol web-controls

4
推荐指数
1
解决办法
4130
查看次数

FindControl()返回null

我试图创建应用程序whad动态添加控件.我有主页,我的asp:内容在这里:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:ScriptManager ID="scriptManager1" runat="server">
</asp:ScriptManager>   
<div style="margin: 10px">
    <asp:UpdatePanel ID="updatePanel1" runat="server">
        <ContentTemplate>
            <asp:PlaceHolder runat="server" ID="myPlaceHolder" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnAdd" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
</div>
<asp:Button ID="btnAdd" runat="server" Text="Add" />
Run Code Online (Sandbox Code Playgroud)

点击btnAdd后,我想添加两个文本框.我试着像http://jagdeepmankotia.wordpress.com/2010/01/30/dynamically-add-controls-in-asp-net-c/

这是我的代码:

    static int myCount = 1;
    private TextBox[] color;
    private TextBox[] text;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        color = new TextBox[myCount];
        text = new TextBox[myCount];

        for (int i = 0; i < myCount; i++)
        {
            TextBox tbColor = new TextBox();
            tbColor.ID = …
Run Code Online (Sandbox Code Playgroud)

asp.net findcontrol dynamically-generated

4
推荐指数
1
解决办法
1万
查看次数

GridView内部访问控制寻呼机模板 - ASP.NET

我试图访问GridView中的PagerTemplate内的LinkBut​​ton.

但是,我得到一个NullReferenceException并且我不知道我在这里做错了什么.

我试过以下......

((LinkButton)GridView1.BottomPagerRow.FindControl("lnkbtnPrevious"));
((LinkButton)GridView1.FindControl("lnkbtnPrevious"));
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

谢谢!

asp.net gridview findcontrol custompaging

3
推荐指数
1
解决办法
1万
查看次数

FormView.FindControl()返回null直到DataBind()

为什么方法在调用之前FindControl()返回.nullFormViewDataBind()

之后它会正确返回所有内容?

有什么解决方法?

呼叫DataBind()的第一次调用之前FindControl()

.net asp.net formview asp.net-2.0 findcontrol

3
推荐指数
1
解决办法
3948
查看次数

即使在DataBound事件上也无法在FormView.InsertItemTemplate中找到控件

我有FormView我的页面标记:

<asp:FormView ruanat="server" ID="FormView1" DataSourceID="SqlDataSource1" OnDataBinding="FormView1_DataBinding" OnDataBound="FormView1_DataBound">
   <InsertItemTemplate>
      <uc:UserControl1 runat="server" ID="ucUserControl1" />
   </InsertItemTemplate>
</asp:FormView>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" SelectCommand="EXEC someSP" />
Run Code Online (Sandbox Code Playgroud)

它是代码隐藏的WAS:

protected void FormView1_DataBound(object sender, EventArgs e)
{
   var c = FormView1.FindControl("ucUserControl1"); // returns null
}
Run Code Online (Sandbox Code Playgroud)

BECAME:

protected void FormView1_DataBinding(object sender, EventArgs e)
{
   FormView1.ChangeMode(FormViewMode.Insert);
}

protected void FormView1_DataBound(object sender, EventArgs e)
{
   if (FormView1.CurrentMode = FormViewMode.Insert)
   {
      var c = FormView1.FindControl("ucUserControl1"); // returns null no more!
   }
}
Run Code Online (Sandbox Code Playgroud)

从理论上讲,我能够FormView在数据绑定后找到控制权.但我不是.为什么?

.net asp.net formview findcontrol databound

3
推荐指数
1
解决办法
7033
查看次数

在FormView中找不到控件?

我需要找到这个<a>标签驻留在一个FormView控件中,我需要根据条件删除这个标签,但我找不到它使用FormView.FindControl方法

<asp:UpdatePanel ID="upDiscipline" runat="server">
   <ContentTemplate>
        <asp:FormView ID="fvMediaIntro" runat="server">
           <ItemTemplate>           
                  <div class="clipControls">
                     <a runat="server" id="iNeedToFindThis" href="#">here</a>
                  </div>
           </ItemTemplate>
   </ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

我试过fvMediaIntro.FindControl()fvMediaIntro.Row.FindControl(),既不工作.有什么想法吗?

c# asp.net formview findcontrol

3
推荐指数
1
解决办法
1万
查看次数

如何在该ASP.NET页面上的另一个用户控件的事件内找到ASP.NET页面的用户控件编辑:不同的内容占位符?

我有一个ASP.NET页面,注册了2个用户控件.第一个只有一个按钮.第二个是简单文本,默认隐藏.我想要的是在单击第一个按钮时(即按钮单击事件)使第二个可见.

ASP.NET页面:

<%@ Page Title="" Language="C#" CodeFile="test.aspx.cs" Inherits="test" %>
<%@ Register Src="~/UC_button.ascx" TagName="button" TagPrefix="UC" %>
<%@ Register Src="~/UC_text.ascx" TagName="text" TagPrefix="UC" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MyTestContent" Runat="Server">
    <UC:button ID="showbutton1" runat="server" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MyTestContent2" Runat="Server">
    <UC:text runat="server" Visible="false" ID="text1" />
</asp:Content>
Run Code Online (Sandbox Code Playgroud)

UC_Button.ascx.cs:

protected void button1_Click(object sender, EventArgs e)
{
    Button btnSender = (Button)sender;
    Page parentPage = btnSender.Page;
    UserControl UC_text = (UserControl)parentPage.FindControl("text1");
    UC_text.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我Object reference not set to an instance of an object.在代码的最后一行得到了众所周知的错误.

编辑:

首次发布此内容时,我忘记提及一件事.用户控件在不同的<asp:Content></asp:Content>控件中(我编辑了上面的示例).如果我把它们放在相同的占位符代码中工作就好了.如果我将它们放在单独的内容占位符中,我无法使用findcontrol以任何方式找到它们.为什么这样,我怎么能找到它们?

asp.net user-controls findcontrol contentplaceholder

3
推荐指数
1
解决办法
4万
查看次数

FindControl - 找不到下拉列表

我有一个下拉列表:

<asp:DropDownList ID="ddlGoalKeeper" runat="server">
                </asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)

一个不错的小人。我有一些代码可以找到它:

DropDownList myControl1 = (DropDownList)Page.FindControl("ddlGoalKeeper");
Run Code Online (Sandbox Code Playgroud)

不是..只是我myControl1没有设置...所以当我稍后在我的代码中尝试将可见设置为true时,它不起作用。

有任何想法吗?

c# asp.net findcontrol drop-down-menu

3
推荐指数
1
解决办法
1万
查看次数

FindControl在FormView的错误模板中查找控件

在FormView中切换模式时,如何从代码隐藏中找到控件? 看起来你不能在Page_Load事件期间使用FindControl,因为它将在先前显示的模板而不是新选择的模板中搜索控件.我怀疑你不能单独依赖PageLoad但是必须在另一个事件中找到控件,比如OnDataBound,但你真的应该这样做吗?我在我的日子里看过几个没有OnDataBound等事件的表单...

关于我的具体案例的更多细节: 我有一个formview,其中ItemTemplate,InsertItemTemplate和EditItemTemplate都包含相同的文本框.(它在所有模板中都有相同的ID)

在Page_Load事件期间,我使用FindControl来定位文本框并更改其可见性.在最初加载formview时工作得很好,但由于某种原因,当表单更改模式/更改模板时它不起作用(在页面呈现后,您看到文本框可见性不正确)

例如,从read模式切换到编辑模式 - formview.Mode将设置为FormViewMode.Edit,但在PageLoad事件期间使用FindControl时,它将搜索ItemTemplate中的控件而不是EditItemTemplate.因此,如果您在所有模板中都有一个具有相同ID的控件,它将在不正确的模板中找到该控件,并且在页面加载后,您将非常困惑为什么加载的控件不具有相同的属性正如你在pageLoad期间在调试器中检查它时所想的那样.

asp.net formview findcontrol

3
推荐指数
1
解决办法
2814
查看次数

如何以编程方式将控件添加到母版页的内容占位符

在base.master上:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Base.master.cs" Inherits="WebApplicationControlTest.Base" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>The title</title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        There is a content here: <br />
        <asp:ContentPlaceHolder ID="body" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在嵌套的主人身上

<%@ Master Language="C#" MasterPageFile="~/MasterPages/Base.Master" AutoEventWireup="true" CodeBehind="NestedMasterPageTest2.master.cs" Inherits="WebApplicationControlTest.MasterPages.NestedMasterPageTest2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>

<asp:Content ID="PlaceHolder" ContentPlaceHolderID="body" runat="server">
    This is inside the NestedPage<br />
    <asp:ContentPlaceHolder ID="PlaceHolderLeft" runat="server">
    </asp:ContentPlaceHolder>
    <asp:ContentPlaceHolder ID="PlaceHolderRight" runat="server">
    </asp:ContentPlaceHolder> …
Run Code Online (Sandbox Code Playgroud)

master-pages findcontrol contentplaceholder

2
推荐指数
1
解决办法
2万
查看次数