在ASP.NET中使用FindControl查找HTML控件

时间:2010-04-01 08:13:51

标签: asp.net

我将一个选择控件添加到ASPX页面,如下所示:

hgc = new HtmlGenericControl();
hgc.InnerHtml = @"<select runat='server' id='my_selectlist'> \
                  <option value='volvo'>Volvo</option> \
                  <option value='saab'>Saab</option> \
                  <option value='mercedes'>Mercedes</option> \
                  <option value='audi'>Audi</option> \
                </select>";

然后在按钮点击事件中,我使用下面的代码,尝试获取值

HtmlSelect s = (HtmlSelect)hgc.FindControl("my_selectlist");
label.Text = s.Value;

我收到错误:“对象引用未设置为对象的实例。” 有没有人以前尝试过?

最好的问候

3 个答案:

答案 0 :(得分:2)

HTML!=服务器控制:)

您可以通过以下方式获取值:Request["my_Selectlist"];如果您想以编程方式访问它,而不是GenericControl,则需要创建HtmlSelect control并向其添加项目。

示例:

var sl = new HtmlSelect();
sl.ID = "my_selectlist";
sl.Items.Add(new ListItem("Volvo", "volvo"));
sl.Items.Add(new ListItem("Saab", "saab"));
sl.Items.Add(new ListItem("Mercedes", "mercedes"));
sl.Items.Add(new ListItem("Audi", "audi"));

答案 1 :(得分:1)

这里的InnerHtml实际是渲染的内部HTML,因此runat服务器只会显示为任何其他属性(尽管是无效的),而不是作为线索。 NET来处理它。

尝试这样的事情:

hgc = new HtmlGenericControl();
hgc.TagName = "select";
hgc.ID = "my_selectlist";
hgc.InnerHtml = @"<option value='volvo'>Volvo</option> \
              <option value='saab'>Saab</option> \
              <option value='mercedes'>Mercedes</option> \
              <option value='audi'>Audi</option>";

答案 2 :(得分:0)

如果您将html放入实际页面然后设置runat =“server”

,这将有效

将它放在HtmlGenericControl.InnerHtml中的问题是整个事情只是输出 - 如果你查看视图源,你会看到它说runat =“server”就在那里。

在解析页面并处理了runats后输出