Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用asp.net web表单从代码隐藏访问更新面板内的文本框、标签_C#_Asp.net_Webforms_Asp.net Ajax_Code Behind - Fatal编程技术网

C# 如何使用asp.net web表单从代码隐藏访问更新面板内的文本框、标签

C# 如何使用asp.net web表单从代码隐藏访问更新面板内的文本框、标签,c#,asp.net,webforms,asp.net-ajax,code-behind,C#,Asp.net,Webforms,Asp.net Ajax,Code Behind,我在更新面板中定义了几个控件,这些控件绑定到repeater控件。我需要根据匿名字段隐藏和显示用户名和国家,但问题是我无法以编程方式访问更新面板中定义的控件 如何访问这些控件,我也在网上查看过,但找不到很多参考资料 下面是来自aspx页面和.cs页面的代码 <asp:UpdatePanel ID="updPnlComments" runat="server"> <ContentTemplate> <table border="0" width="100%" >

我在更新面板中定义了几个控件,这些控件绑定到repeater控件。我需要根据匿名字段隐藏和显示用户名和国家,但问题是我无法以编程方式访问更新面板中定义的控件

如何访问这些控件,我也在网上查看过,但找不到很多参考资料

下面是来自aspx页面和.cs页面的代码

<asp:UpdatePanel ID="updPnlComments" runat="server">
<ContentTemplate>
<table border="0" width="100%" ><tr><td valign="top">
    <asp:Repeater ID="rptCommentList" runat="server" EnableViewState="false">
       <ItemTemplate>
            <div id="divComPostDate" class="ArticlePubDate">
                <asp:Label ID="lblComDateAdded" runat="server" Text="Added"></asp:Label> 
                <asp:Label ID="lblComPostDate" runat="server" Text='<%# FormatCommentDate(Eval("comPostDate")) %>'></asp:Label>
            </div>
            <div id="divComMSGDetail" class="PostCommentMSG">
                <asp:Label ID="lblComMSGDetails"  runat="server" Text='<%# Eval("comMessage") %>'></asp:Label> 
            </div>
            <div id="divComUserName" class="ComUserName">
                <asp:Label ID="lblComUserName" runat="server" Text='<%# Eval("comFullName") %>'></asp:Label>,
                <asp:Label ID="lblComCountry" runat="server" Text='<%# Eval("comCountry") %>'></asp:Label>
                <asp:Label ID="lblUserAnonymous" runat="server" Text='<%# showUserName(Eval("comAnonymous")) %>' Visible=false></asp:Label>
            </div>
            <div id="divThinlLine" class="ThinLine" ></div>
        </ItemTemplate>
     </asp:Repeater>
  </td></tr><tr><td>
    <table border="0" width="90%" ><tr><td align="center" valign="bottom" height="50px">
      <table border="0"><tr><td align="center" >
             <uc1:PagerControl ID="PagerControl1" runat="server"  CssClass="gold-pager"  PageMode="LinkButton"  />
      </td></tr></table>
    </td></tr></table>
</td></tr></table>
</ContentTemplate>
</asp:UpdatePanel>
将中继器控件与寻呼机和中继器控件绑定的功能

protected void getCommentsList(int iArticleID)
{
    try
    {

        PagerControl1.PageSize = 4;
        //PagerControl1.TotalItems = 1;
        //PagerControl1.PageMode = 4;
        PagerControl1.DisplayEntriesCount = 5;
        //Will show 2 links after ...
        PagerControl1.EdgeEntriesCount = 0;
        DataSet ds = DataProvider.GetCommentList(iArticleID);
        DataView dv = ds.Tables[0].DefaultView;

        //pass the datatable and control to bind
        PagerControl1.BindDataWithPaging(rptCommentList, dv.Table);

    }
    catch (Exception ex)
    {
        HttpContext.Current.Response.Redirect("Message.aspx?msg=Invalid Request");
    }

问题不在于
UpdatePanel
,而在于
中继器。更新面板内的控件可以在页面范围内直接访问(如中继器本身),而中继器内的控件必须在绑定期间或之后“找到”。中继器中的代码是许多项的模板,而不是特定于任何一项

我建议在中继器中添加一个
ItemDataBound
事件,并在每个项都绑定到中继器时执行此事件中的逻辑

<asp:Repeater ID="rptCommentList" runat="server" EnableViewState="false"
     OnItemDataBound="rptCommentList_ItemDataBound">
显然,首先用要绑定到中继器的集合/列表/表的对象类型替换
MyObject


希望有帮助。

如果控件位于中继器内

 Label lbl=(Label)Repeater1.FindControl("lbl1");
我应该做这项工作。
否则,您可以直接访问控件。如果没有,则页面有错误且未编译

如果我得到MyObject MyObject=(MyObject)e.Item.DataItem;右线。如何将其与数据字段绑定。。“comAnonymous”将MyObject更改为与中继器绑定的任何对象。例如,如果您要绑定一组数据行,您将使用
DataRow myDataRow=(DataRow)e.Item.DataItem
并通过myDataRow[“comAnonymous”]引用它。ToString()
。它给了我DataRow错误,所以我使用DataRowView,现在它工作正常。非常感谢你。。。这就是为什么我喜欢层叠流动。我以个人身份工作,所以当我陷入困境时,没有人帮助我。所以就像一个向导,及时的帮助是一个救世主。再次感谢您的工作:-DataRowView myDataRow=(DataRowView)e.Item.DataItem;//施展魔法!如果(isAnonymous==true)lblComUserName.Visible=false;啊,是的,
DataRowView
绑定到中继器时需要
DataRowView
(例如
DataTable.DefaultView
)。没问题:)我很乐意帮忙。
protected void rptCommentList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    {
        // get the data item
        MyObject myObject = (MyObject)e.Item.DataItem;

        // find the label
        Label lblComUserName = (Label)e.Item.FindControl("lblComUserName");

        // do the magic!
        if (myObject.comAnonymous)
             lblComUserName.Visible = false;
    }
}
 Label lbl=(Label)Repeater1.FindControl("lbl1");