在代码隐藏中循环遍历HTML无序列表中的控件

时间:2018-01-19 04:44:21

标签: c# html

我在后面的代码中添加了控件,如下所示

HtmlGenericControl ul = new HtmlGenericControl("ul");
  ul.Controls.Add(new LiteralControl("<li>"));
  ul.Controls.Add(new LiteralControl("<img src='" + url + "' alt='" + column.ColumnName.Split('_')[1] + " '/>"));
  ul.Controls.Add(new LiteralControl("<input type='hidden' value='" + column.ColumnName.Split('_')[2] + "' />"));
  ul.Controls.Add(new LiteralControl("</li>"));

现在我想遍历ul中的每个控件并查找图像标记和隐藏字段。请帮助。我尝试过如下但是它给出了错误:

foreach (HtmlGenericControl c in ul.Controls)
{
 HtmlGenericControl img = (HtmlGenericControl)ul.FindControl("img");
}

1 个答案:

答案 0 :(得分:0)

导致例外的第一个问题是,您 Your app.component.html should now look like this: <input [(ngModel)]="searchText" placeholder="search text goes here"> <ul> <li *ngFor="let c of characters | filter : searchText"> {{c}} </li> </ul> Your app.module.ts import { FilterPipe} from './filter.pipe'; @NgModule({ declarations: [ FilterPipe ], }) Create the Filter Pipe import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'filter' }) export class FilterPipe implements PipeTransform { transform(items: any[], searchText: string): any[] { if(!items) return []; if(!searchText) return items; searchText = searchText.toLowerCase(); return items.filter( it => { return it.toLowerCase().includes(searchText); }); } }对所有foreach进行Controls,但您对孩子使用ul类型它们很简单HtmlGenericControl。所以foreach尝试将LiteralControls强制转换为LiteralControl并抛出异常,因为它是不可能的。

此外,正如名称所示,HtmlGenericControl只是一个文字,因此它不知道它是LiteralControl标记。它只知道完整定义img作为其文本。

为了满足您的要求,您必须使用<img src='' alt=''/>构建ul内容,然后您可以更轻松地进行查询。

HtmlGenericControls

此外,要在此内搜索,您需要递归,因为结果是一个控件树:

HtmlGenericControl ul = new HtmlGenericControl("ul");
var li = new HtmlGenericControl("li");
var img = new HtmlGenericControl("img");
img.Attributes.Add("src", "url");
li.Controls.Add(img);
ul.Controls.Add(li);