如何访问动态添加的html标签?

时间:2009-07-28 13:30:12

标签: asp.net html

我正在自学asp.net,正在尝试一些小项目来帮助更好地理解这些概念。

我正在创建一个简单的电子学习网站,使用html和asp.net(c#),在其中一个页面上有一个固定数量的多选择问卷, 我通过从数据库表中选择随机问题创建问卷,然后创建一个字符串,其中包含正确格式化的问题的html代码(标签和答案中的问题作为单选按钮),然后将其插入到div的innerhtml中标签。 所有上述内容都是在pageload()上完成的; 问题是我需要根据答案表检查答案(我已经在数组中存储了正确的答案),但由于html代码在页面加载后添加,因此无法看到标签或其ID。

问题: 我被告知我可以使用request.form [“Q#”]访问html标签? 可以请一些人向我解释......它可以做到吗?

以及执行相同任务的任何其他可能方法? (请阅读下面的注释)

注意: 我知道我可以用html创建问卷结构,然后将问题/答案添加到标签中。

或使用runat服务器属性创建隐藏字段,然后将答案存储到其中,并使用服务器端代码检查答案表。

4 个答案:

答案 0 :(得分:2)

  

问题:我被告知我可以使用request.form [“Q#”]访问html标签?可以请一些人向我解释......它可以做到吗?

这几乎就是你所写的。 Request.Form是一个关联数组,页面上的每个表单字段都有一条记录。数组由输入字段的name属性键控。对于服务器端控件,这通常默认为控件的ClientId ...但是如果你自己生成HTML,那么任何事情都会发生。

if(Request.Form["Q0"] == answers[0]) {
    //Answer is correct
}

然而,从事物的声音来看,有更好的方法来完成你所追求的目标。

一种选择是使用Repeater控件,并将其数据源设置为包含有关问题信息的数组。然后你可以这样做:

foreach(item as RepeaterItem in repeater) {
    if(item.FindControl("radioButtonListId").SelectedValue == answer) {
        //Answer correct
    }
}

编辑:

以下是对如何填充Request.Form集合的快速说明。

页面的典型请求如下:
客户端向页面发送请求到服务器 服务器执行Asp.Net页面生命周期(init,load,control events,render) 服务器获取Asp.Net生成的HTML并将其发送到客户端。

当客户希望将更多信息发送回服务器时,它会通过提交由Asp.Net生成的特殊表单来实现。这导致每个输入控件的值附加到发送到Asp.Net的请求:

客户端向服务器发送POST请求(附加表单值) 服务器执行Asp.Net页面生命周期(init,load,control events,render) 服务器获取Asp.Net生成的HTML并将其发送到客户端。

正如您所看到的,如果Request.Form将具有值,则在PageInit开始之前设置它(更不用说PageLoad)。

答案 1 :(得分:1)

由于您的问题字符串是格式化的html,请尝试文字控件而不是标签。标签可以尝试“转义”您的html格式,并将您的html字符串括在span标记中。而不是div,尝试使用HTML面板。它将呈现相同的html,使事后更容易插入文字和单选按钮。

答案 2 :(得分:0)

抱歉,你在做什么?您正在服务器端构建HTML代码,然后将其添加到div或标签或其他什么?我想这不是正确的做法。

首先创建一个合适的模型。构建类似

的类
  • QuestionAnswerItem是一个包含问题(文本等等)的类,有几个选项(例如字符串列表)和正确的答案。
  • 包含QuestionAnswerItem对象列表的问卷类

然后,您应该使用Repeater(或其他DataBound控件),然后使用CheckBoxListRadioButtonList等列表控件。检查MSDN文档中的Repeater控件及其DataSource属性和DataBind()方法。我很确定它会对你有帮助。

然后,可以通过迭代转发器项并找到RadioButtonListCheckBoxList控件(可能使用FindControl(...))方法来访问所选答案。获得控件引用后,可以对其进行迭代并检查"Selected"属性。

使用这种方法可以摆脱Request.Form[...]。到目前为止,我很少使用它。

答案 3 :(得分:0)

在ASP.NET中,有“Web服务器控件”通常取代传统的HTML控件。

例如,< input type =“radio”/>在HTML中将是< asp:RadioButton runat =“server”/>作为服务器控件。还有一些Web服务器控件不能以1对1的方式映射到传统的HTML控件,例如RadioButtonList。

这使得在后面的代码中访问表单数据变得更加容易。

http://support.microsoft.com/kb/306459