我不确定这个问题究竟是什么,并且没有任何运气寻找答案。我目前正在尝试使用后面的代码中的for循环访问网页上的多个元素。问题是;我需要通过id访问有问题的元素,但是作为字符串,仍然能够为元素分配新类,以及更改内部HTML的能力。例如:
<li>Name: <a runat="server" id="name0" class="data">MACHINE</a></li>
<li>Name: <a runat="server" id="name1" class="data">MACHINE</a></li>
<li>Name: <a runat="server" id="name2" class="data">MACHINE</a></li>
<li>Name: <a runat="server" id="name3" class="data">MACHINE</a></li>
<li>Name: <a runat="server" id="name4" class="data">MACHINE</a></li>
for (int i = 0; i < 10; i++) {
container.controls(string.Format("name{0}", i)).class = "inactive";
container.controls(string.Format("name{0}", i)).innerHtml = "NameFromDB";
}
上面的C#代码是伪代码,我希望有人可以帮我解决这个问题,因为我没有运气。我认为这只是我在搜索中没有产生结果的方式。
答案 0 :(得分:0)
假设您的所有控件都在另一个服务器控件内,如下所示:
<div runat="server" id="ContainerControl">
<li>Name: <a runat="server" id="name0" class="data">MACHINE</a></li>
<li>Name: <a runat="server" id="name1" class="data">MACHINE</a></li>
<li>Name: <a runat="server" id="name2" class="data">MACHINE</a></li>
<li>Name: <a runat="server" id="name3" class="data">MACHINE</a></li>
<li>Name: <a runat="server" id="name4" class="data">MACHINE</a></li>
</div>
你可以这样做。转换为HtmlAnchor
可确保我们不会捕获可能位于容器内的其他服务器控件。
var container = ContainerControl;
foreach (Control control in container.Controls)
{
var anchor = control as HtmlAnchor;
if (anchor != null)
{
anchor.InnerText = "new inner text";
anchor.Attributes.Add("class", "newclass");
}
}
或者,如果您想按编号引用它们,并且您已经知道它们是正确的控制类型,您可以这样做:
for (var index = 0; index <= 4; index++)
{
var control = (HtmlContainerControl)FindControl("name" + index);
control.InnerText = "new inner text";
control.Attributes.Add("class", "newclass");
}
FindControl
按ID获取页面控件。
(转换为HtmlContainerControl
,这是InnerText
控件的基类。您可以转换为HtmlAnchor
。)
答案 1 :(得分:0)
有助于查看您的父控件是什么。循环遍历控件列表可以通过循环父级的子控件来完成。以下是在表单视图中循环控件的示例。
foreach (FormViewRow r in formView.Controls[0].Controls)
{
foreach (TableCell cell in r.Controls)
{
foreach (Control ctr in cell.Controls)
{
//Check to see if child control is generic control
if (ctr is HtmlGenericControl)
{
// cast to HtmlGenericControl to access properties
HtmlGenericControl li = (HtmlGenericControl)ctr;
li.Attributes.Add("class", "inactive");
li.InnerHtml = "NameFromDB";
}
}
}
}