我在后面的代码中添加了控件,如下所示
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");
}
答案 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);