标签: findcontrol

C#,FindControl

对不起,但我不明白为什么这不起作用.编译后,我收到一个"空引用异常".请帮忙.

public partial class labs_test : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text != "")
        {
            Label Label1 = (Label)Master.FindControl("Label1");
            Label1.Text = "<b>The text you entered was: " + TextBox1.Text + ".</b>";
        }
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Label Label1 = (Label)Master.FindControl("Label1");
        Label1.Text = "<b>You chose <u>" + DropDownList1.SelectedValue + "</u> from the dropdown menu.</b>";
    }
}
Run Code Online (Sandbox Code Playgroud)

和用户界面:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="labs_test" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content> …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net findcontrol

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

嵌套的Masterpages和.FindControl

在一个站点上,我只使用单级主页,在使用该主页的页面中,我可以执行此操作.Master.FindControl("controlName")来访问该控件.工作良好.

但是,在具有两个母版页级别的站点上使用相同的代码.以MainMaster为主的MainMaster和SpecificMaster.

因此,在使用SpecificMaster的页面上,FindControl为对象返回null.我看到的唯一区别是主页的嵌套.

当我设置断点并查看page.Master时,它显示的是SpecificMaster,而SpecificMaster正确显示MainMaster作为其主节点,但FindControl仍然失败.

当我在IE中查看源代码时,控件被正确命名,没有.NET正在进行中.

这有什么想法?

TIA!

c# asp.net master-pages findcontrol

8
推荐指数
1
解决办法
6595
查看次数

c# - 在div id上使用FindControl时出错

我有一个ASP.NET站点,我试图通过C#代码隐藏文件中的ID访问div元素.基本上我想看看是否存在div元素,如果存在,则改变其属性.

我发现很多资源都指向了十几种不同的解决方案,而且似乎都没有.

ASP.Net页面上的HTML:

<div class="contentArea">
     <div class="block" id="button1" runat="server">
            Some Content Here
     </div>
     <div class="block" id="button2" runat="server">
            Some Content Here
     </div>
     <div class="block" id="button3" runat="server">
            Some Content Here
     </div>
</div>
Run Code Online (Sandbox Code Playgroud)

C#代码背后(我尝试过的例子):

System.Web.UI.HtmlControls.HtmlGenericControl div1 = (System.Web.UI.HtmlControls.HtmlGenericControl)this.FindControl("button1");
div1.Attributes["class"] = "classNameHere";
Run Code Online (Sandbox Code Playgroud)

要么

Control div1 = this.FindControl("button1");
div1.GetType();
Run Code Online (Sandbox Code Playgroud)

当代码到达上述每个示例的第二行时,我收到一个错误:

你调用的对象是空的.

如果我尝试以下方法:

if (div1 != null)
{
    // Do Something;
}
Run Code Online (Sandbox Code Playgroud)

什么都没发生,因为div1总是设置为null.具有讽刺意味的是,如果我查看Locals窗口并检查它,我可以在列表中看到按钮#id,所以我知道它们在那里,但是系统表现得好像没有找到控件.

我的最终目标是找到按钮div的最大ID#(查看我的html示例,最大ID将是3(button3).也许有更好的方法去做,但无论哪种方式,一旦我有我的max id,我希望能够触及每个div并改变一些css属性.

虽然我可以通过jQuery轻松完成所有这些操作,但在本例中我需要在C#中执行此操作.

任何帮助深表感谢.如果您需要更多信息,请告诉我们.

更新 我从头开始创建一个新的C#Web项目.添加母版页(而不是更改母版页)并使用母版页添加网页表单后,我只在内容ID ="Content2"下的网络表单中添加了一行:

<div id="button1"></div>
Run Code Online (Sandbox Code Playgroud)

从c#代码背后我仍然遇到与以前完全相同的问题.

最后的更新和答案 我很震惊没有人(包括我自己)从上述更新中抓住了我的错误.当我在div下从头开始创建一个新项目时,我从未放过runat ="server".以下是我从头开始在新项目中解决问题的方法:

将runat ="server"添加到div:

<div id="button1" runat="server"></div>
Run Code Online (Sandbox Code Playgroud)

然后我在MasterPage下的ContentPlaceHolder上做了一个FindControl:

ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1"); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net findcontrol

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

使用母版页时访问C#中的内容控件

今天是个好日子,

我正在ASP.NET中构建一个页面,并在此过程中使用母版页.

我的母版页中有一个内容地点持有人名称"cphBody",其中包含该母版页作为母版页的每个页面的正文.

在ASP.NET网页中,我有一个Content标签(引用"cphBody"),它还包含一些控件(按钮,Infragistics控件等),我想在CodeBehind文件中访问这些控件.但是,我不能直接这样做(this.myControl ...),因为它们嵌套在Content标签中.

我找到了FindControl方法的解决方法.

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder) Master.FindControl("cphBody");
ControlType myControl = (ControlType) contentPlaceHolder.FindControl("ControlName");
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我怀疑它不是一个非常好的设计.你们知道更优雅的方式吗?

谢谢!

Guillaume Gervais.

asp.net master-pages findcontrol

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

从页面基类中查找页面中的控件

希望你有一个愉快的星期五和东西...好吧,所以这是我的问题:

我的所有ASPX页面都继承自一个名为BasePage的基类.BasePage继承自:

System.Web.UI.Page
Run Code Online (Sandbox Code Playgroud)

现在,如何从我的页面基页访问/设置我的aspx页面中的控件?我试过这个:

HyperLink hypMainMenu = (HyperLink)Page.FindControl("hypMainMenu");
hypMainMenu.NavigateUrl = AppConfiguration.AppSettings.Urls.MainMenu;
Run Code Online (Sandbox Code Playgroud)

但是hypMainMenu总是空的 - 我找不到这个混蛋.有任何想法吗?或者这是一种不好的做法,有人可以推荐一种更好的方法吗?

提前致谢!

c# asp.net inheritance findcontrol hyperlink

5
推荐指数
1
解决办法
3449
查看次数

使用FindControl:访问窗体视图中的控件

我正在开发一个简单的婚礼清单应用程序,客人可以预订他们想要为新娘和新郎购买的礼物.Reserve页面在几个面板中包含几个字段,所有字段都包含在FormView中.

用户输入他们的姓名,电子邮件和他们想要保留的项目数量,页面将在数据库中进行必要的预订.

我的第一个问题是在FormView_ItemCommand中,我无法引用FormView中的任何其他控件....我认为这是FindControl的一个案例 - 但是当我从来不需要它时,为什么我需要一个Formview对于ListViews或DetailViews?

其次,我知道以下代码有效..

Dim oCtrl as TextBox = Me.fvwReservation.FindControl("txtEmail")
Dim Test As String = oCtrl.Text
Run Code Online (Sandbox Code Playgroud)

......但为什么我不能用......

Dim Test As String = Me.fvwReservation.FindControl("txtEmail").Text
Run Code Online (Sandbox Code Playgroud)

??

最后,我认为在这种情况下我不需要它,但我一直在研究递归的FindControl变体,但我实际上并没有找到实际编译的变体!有什么建议?

一篇文章很多 - 提前谢谢.

免费代码片段:

<asp:FormView ID="fvwReservation" runat="Server" DataSourceID="dsGift">
     <ItemTemplate>
      <asp:Panel runat="server" ID="pnlDetails">
       <h3>Reserve Item: <%#Eval("ShortDesc")%></h3>
       <p>You have chosen to reserve the <em><%#Eval("LongDesc")%></em> gift.</p>
       <p>Please enter your details below to confirm the reservation.</p>
      </asp:Panel>
      <asp:Panel runat="server" ID="pnlConfirm">
       <div class="row">
        <asp:Label runat="server" CssClass="label">Name:</asp:Label><asp:TextBox ID="txtName" MaxLength="50" runat="server" CssClass="Field" />
        <asp:RequiredFieldValidator ID="rfvName" runat="server" ErrorMessage="You must specify your …
Run Code Online (Sandbox Code Playgroud)

asp.net formview findcontrol

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

.FindControl总是返回null

我有两种方法.第一个动态创建一个表,然后将该表添加到PlaceHolder中.

private void generateData(){
    Table tbl = new Table();
    tbl.ID = "table1";
    holder_info.Controls.Add(tbl);
    // ...adding tr's and td's....
    // ...adding CheckBox in tds....
}
Run Code Online (Sandbox Code Playgroud)

如果我在此方法中执行.FindControl("..."),我可以使用以下命令找到控件:

CheckBox check = (CheckBox)holder_info.FindControl("checkbox1");
Run Code Online (Sandbox Code Playgroud)

没关系,但不是我假装的.

在第二种方法中,我想检查用户是否检查了checkBox并做了一些事情,但我找不到控件(它总是返回null).

protected void saveInfo_Click(object sender, ImageClickEventArgs e)
{
  CheckBox check = (CheckBox)holder_info.FindControl("checkbox1");
  if(check.checked){ ... }
}
Run Code Online (Sandbox Code Playgroud)

此外,如果我试图找到控件"table1",我得到null.

为什么会这样?

c# asp.net findcontrol

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

findcontrol 没有找到动态添加的控件,它只是在之前添加了一行

谁能向我解释一下?

CheckBox ckRequest = new CheckBox();
ckRequest.ID = "ckRequest";
ckRequest.DataBinding += new EventHandler(this.CkIsRequested_DataBinding);
container.Controls.Add(ckRequest);
Control con = container.FindControl("ckRequest");
Run Code Online (Sandbox Code Playgroud)

调试显示 con 仍然为空。

调试还向我展示了,conteiner.Controls 有一个 ID 为“ckRequest”的项目

怎么会这样????


非常感谢您的回答。

其实我尝试以下。 findcontrol 没有在 rowUpdating 事件处理程序中找到动态创建的控件 这对我来说很有意义, findcontrol 仅适用于创建的页面。

页面的可视化树是在哪个时间点创建的?

asp.net controls findcontrol

5
推荐指数
1
解决办法
5997
查看次数

FindControl返回Null

我试图根据相关的文本框控制按钮状态.名称与前缀不同.文本框和按钮位于页面上的表格中.

<asp:Table ID="Table1" runat="server" CssClass="table">
            <asp:TableRow>
                <asp:TableCell Width="15%">
                    <asp:Label ID="lblRequestHeader" runat="server" Text="Requested" CssClass="bold text-center"
                        Width="90%"></asp:Label>
                </asp:TableCell>
                <asp:TableCell Width="15%">
                    <asp:Label ID="lblApprovalHeader" runat="server" Text="Approval" CssClass="bold text-center"
                        Width="90%"></asp:Label>
                </asp:TableCell>
                <asp:TableCell Width="15%">
                    <asp:Label ID="lblApprovalTimeHeader" runat="server" Text="Date/Time of Approval"
                        CssClass="bold text-center" Width="90%"></asp:Label>
                </asp:TableCell>
                <asp:TableCell Width="15%">
                    <asp:Label ID="lblReadyHeader" runat="server" Text="Ready To Pick Up" CssClass="bold text-center"
                        Width="90%"></asp:Label>
                </asp:TableCell>
                <asp:TableCell Width="15%">
                    <asp:Label ID="lblCollectedHeader" runat="server" Text="Collected By TestHouse" CssClass="bold text-center"
                        Width="90%"></asp:Label>
                </asp:TableCell>
                <asp:TableCell Width="15%">
                    <asp:Label ID="lblDeliveredHeader" runat="server" Text="Delivered From TestHouse"
                        CssClass="bold text-center" Width="90%"></asp:Label>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow>
                <asp:TableCell Width="15%">
                    <asp:TextBox …
Run Code Online (Sandbox Code Playgroud)

c# asp.net null findcontrol

5
推荐指数
1
解决办法
7038
查看次数

在转发器页脚中查找控件对文本框返回 null

我有两个嵌套的中继器。在嵌套的页脚中,我有文本框和文件上传控件。我能够毫无问题地获得文件上传的实例,但文本框的实例为空,尽管两者都放置在页脚中。

这是代表内部转发器页脚的 aspx 部分:

<FooterTemplate>
    <tr class="add_comment">
        <td>Add comment </td>
    </tr>
    <tr>
        <td>
            <asp:TextBox runat="server" Columns="20" Rows="3" ID="comment_txt" TextMode="MultiLine" Width="60%" CssClass="new_comment" ViewStateMode="Inherit"></asp:TextBox>
        </td>
    </tr>
    <tr class="add_comment">
         <td>
            <asp:FileUpload ID="uploadImageBtn" runat="server" Text="Add image" OnClick="uploadImage" CssClass="comment_buttons" />
            <asp:Button ID="comment_btn" runat="server" OnClick="submitComment" Text="Comment" CssClass="comment_buttons" />
            </td>
        </tr>
    </table>
</FooterTemplate>
Run Code Online (Sandbox Code Playgroud)

这是我尝试访问控件的 C# 代码:

protected void commentsRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if ((e.Item.ItemType == ListItemType.Footer ))
    {
        Repeater childRepeater = (Repeater)sender;
        TextBox commentTextBox = (TextBox)e.Item.FindControl("comment_txt");
        String postText = commentTextBox.Text.ToString(); 
        FileUpload upFile = (FileUpload)e.Item.FindControl("uploadImageBtn");
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# asp.net repeater findcontrol nested-repeater

5
推荐指数
1
解决办法
1592
查看次数