Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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# 访问中继器中的父类属性_C#_Javascript - Fatal编程技术网

C# 访问中继器中的父类属性

C# 访问中继器中的父类属性,c#,javascript,C#,Javascript,这是交易, 我得到了一个文件列表,它是由repeater和他的数据绑定生成的。在我的标记中,我得到了一个“li”标记的类,无论是否处于活动状态 我只需要在选中文档时,在我的linkbutton的Li parent标记上设置class=“active” <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <ul> </He

这是交易, 我得到了一个文件列表,它是由repeater和他的数据绑定生成的。在我的标记中,我得到了一个“li”标记的类,无论是否处于活动状态

我只需要在选中文档时,在我的linkbutton的Li parent标记上设置class=“active”

    <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li>
                <asp:LinkButton ID="lnk" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' OnCommand="Get_carte"><%# Container.FindControl("lnk").ClientID %> <%# DataBinder.Eval(Container.DataItem, "Name") %>  - <%# DataBinder.Eval(Container.DataItem, "id") %> - <%# DataBinder.Eval(Container.DataItem, "compteur") %></asp:LinkButton></li>
        </ItemTemplate> 
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:Repeater>

  • --
代码隐藏-C#:

您可以将
runat=“server”
id=”“
添加到li中,以便在代码隐藏中进行修改

void Repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{
       if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
       {
         var li = (HtmlControl)e.Item.FindControl("IdOfYourLI");  
         if(condition) //Adjust your condition
         {
           li.Attributes.Add("class", "active");
         }
       }    
 }
您还可以使用JavaScript修改:

添加到
元素id
并使用
GetElementById
方法

youIdOfControlLI.className = 'active';
使用jQuery:

为您设置链接按钮

 <asp:LinkButton ID="lnk" class="linkButton" />

我终于找到了解决问题的办法

@Kapil:你的代码可以工作,但是在重新加载aspx页面时遇到了问题,所以我不能使用这种方法

@阿吉拉斯:我的解决方案基于你的代码

事实上,我不能使用ItemDataBound事件,因为我只绑定了一次中继器,然后在linkbutton上使用了OnCommand事件。这是我的aspx代码:

    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Rpt_DataBound">
                <HeaderTemplate>
                    <ul>
                </HeaderTemplate>
                <ItemTemplate>
                    <li runat="server" ID="li">
                        <asp:LinkButton ID="lnk" class="linkButton" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' OnCommand="Get_carte"><%# Container.FindControl("lnk").ClientID %> <%# DataBinder.Eval(Container.DataItem, "Name") %>  - <%# DataBinder.Eval(Container.DataItem, "id") %> - <%# DataBinder.Eval(Container.DataItem, "compteur") %></asp:LinkButton></li>
                </ItemTemplate> 
                <FooterTemplate>
                    </ul>
                </FooterTemplate>
            </asp:Repeater>
谢谢你的帮助


PS:我将ID置于ViewState中,以防需要代码另一部分中的值。我还可以用lastindexof方法替换我的子字符串。

效果很好。但另一个问题是,当我的Li处于活动状态时,当我单击另一个Li时,我想通过删除属性类来更改他的类。如何找到控件?我尝试过:HtmlGenericControl lipast=(HtmlGenericControl)FindControl(id);但是不起作用。谢谢@Zekth,我很乐意帮助你,使用相同的代码,但你只调整了你的条件,你得到了你检查的属性,你更新了你得到的li.attributes[“class”];我不能使用Repeater_ItemDataBound方法,因为我没有进行另一次数据绑定,我事实上我在第一次加载时加载了所有数据,并将其存储在viewstate中,之后一切都由Ajax完成,对于这个主题,我提出了两个解决方案,我已经尝试过了,当我点击active and Immerdialy Dispear上的类更改时。
    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Rpt_DataBound">
                <HeaderTemplate>
                    <ul>
                </HeaderTemplate>
                <ItemTemplate>
                    <li runat="server" ID="li">
                        <asp:LinkButton ID="lnk" class="linkButton" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' OnCommand="Get_carte"><%# Container.FindControl("lnk").ClientID %> <%# DataBinder.Eval(Container.DataItem, "Name") %>  - <%# DataBinder.Eval(Container.DataItem, "id") %> - <%# DataBinder.Eval(Container.DataItem, "compteur") %></asp:LinkButton></li>
                </ItemTemplate> 
                <FooterTemplate>
                    </ul>
                </FooterTemplate>
            </asp:Repeater>
    protected void Get_carte(object sender, CommandEventArgs e)
    {
        LinkButton lnk = (LinkButton)sender;
        ViewState["liactive"] = lnk.UniqueID.ToString().Substring(0, lnk.UniqueID.ToString().Length - 4);
        lbl_carte.Text = lnk.UniqueID + " " + e.CommandArgument.ToString();
        foreach (RepeaterItem rI in Repeater1.Items)
        {
            if (rI.ItemType == ListItemType.Item || rI.ItemType == ListItemType.AlternatingItem)
            {
                string liactiv = "";
                if (ViewState["liactive"] != null)
                    liactiv = ViewState["liactive"].ToString();
                var li = (HtmlControl)rI.FindControl("li");
                if (li.UniqueID.ToString().Substring(0, li.UniqueID.ToString().Length - 3) == liactiv) //Adjust your condition
                    li.Attributes.Add("class", "active");
                else
                    li.Attributes.Remove("class");
            }
        }

    }