【问题标题】:Submit form fails提交表单失败
【发布时间】:2012-04-28 14:29:17
【问题描述】:

我有一个页面,它是一个考试页面,它选择所有 MCQ 问题及其答案... 在服务器端页面加载中,我添加了 div.innerHtml += "html tags" + question + 包含答案的单选按钮,它一直从数据库中选择,直到所有问题都在客户端呈现,问题是我添加了所有这些问题和标签表单,最后有一个输入提交按钮,它应该提交所有单选按钮的值,但即使我设置了表单操作,我也无法获得单选按钮的值...

这里有一些代码:

using (SqlDataReader sr1 = command1.ExecuteReader())
{
    cc.InnerHtml = "<form id=\"form2\" name=\"form2\" method=\"post\" action=\"\">";
    while (sr1.Read())
    {
        i++;
        iString = i.ToString();
        questionText = sr1["text"].ToString();
        question_first_wrong_answer = sr1["first_wrong_answer"].ToString();
        question_second_wrong_answer = sr1["second_wrong_answer"].ToString();
        question_right_answer = sr1["right_answer"].ToString();
        questionValue = (int)sr1["value"];
        c = answerPos.Next(0, 10);

        cc.InnerHtml += "<span>" + iString + "- " + questionText +"</span>"
                     + "<br />"
                     + "<table style=\"width:77%; margin-left: 47px;\">"
                     + "<tr>"
                     + "    <td style=\"width: 210px\">"
                     + " <input type=\"radio\" name=\"question" + iString + "a\" value=\"" + question_first_wrong_answer + "\" />" + question_first_wrong_answer + "</td>"
                     + "<td style=\"width: 210px\">"
                     + "<input type=\"radio\"  name=\"question" + iString + "a\" value=\"" + question_second_wrong_answer + "\" />" + question_second_wrong_answer + "</td>"
                     + "<td style=\"width: 210px\">"
                     + "<input type=\"radio\"  name=\"question" + iString + "a\" value=\"" + question_right_answer + "\" />" + question_right_answer + "</td>"
                     + "</tr>"
                     + "</table>"
                     + "<br />";

    }
    sr1.Close();
    cc.InnerHtml += "<input id=\"Submit1\" type=\"submit\" value=\"Submit\" />"
                 + "</form>";
}

【问题讨论】:

  • 我认为如果您显示生成的 HTML 将会非常有帮助。
  • 为什么要“动态”构建整个表单。为什么不直接将表单放入 ASP.NET (HTML) 并在运行时放入问题和答案?

标签: asp.net html


【解决方案1】:

不要使用 InnerHtml。这是错的。 使用 Inbuild HtmlPage 类

以此为例

Page.Controls.Add( 
  new LiteralControl(@"<html>\r\n<body>\r\n
    <h1>Welcome to my Homepage!</h1>\r\n"));
HtmlForm Form1 = new HtmlForm();
Form1.ID = "Form1";
Form1.Method = "post";
Form1.Controls.Add(
  new LiteralControl("\r\nWhat is your name?\r\n"));
TextBox TextBox1 = new TextBox();
TextBox1.ID = "txtName";
Form1.Controls.Add(TextBox1);
Form1.Controls.Add(
  new LiteralControl("\r\n<br />What is your gender?\r\n"));
DropDownList DropDownList1 = new DropDownList();
DropDownList1.ID = "ddlGender";
ListItem ListItem1 = new ListItem();
ListItem1.Selected = true;
ListItem1.Value = "M";
ListItem1.Text = "Male";
DropDownList1.Items.Add(ListItem1);
ListItem ListItem2 = new ListItem();
ListItem2.Value = "F";
ListItem2.Text = "Female";
DropDownList1.Items.Add(ListItem2);
ListItem ListItem3 = new ListItem();
ListItem3.Value = "U";
ListItem3.Text = "Undecided";
DropDownList1.Items.Add(ListItem3);
Form1.Controls.Add(
  new LiteralControl("\r\n<br /> \r\n"));
Button Button1 = new Button();
Button1.Text = "Submit!";
Form1.Controls.Add(Button1);
Form1.Controls.Add(
  new LiteralControl("\r\n</body>\r\n</html>"));
Controls.Add(Form1);

【讨论】:

    【解决方案2】:

    删除服务器表单元素 (&lt;form runat="server" )。如果存在,则丢弃此新表单。

    您还为不同的输入控件使用相同的名称。

    name=\"question" + iString + "a\" value=\""
    

    所以您也需要为收音机设置唯一的名称。

    【讨论】:

    • 我正在从数据库中读取元素,当它读取时它不断增加“i”,我将其转换为 iString,它被添加到单选按钮的每个“组”中,因此每个问题都有 3 个具有相同名称的答案但是不同的值...但这不是问题...当我单击提交按钮时它什么也不做...所以我想知道如何获取单选按钮值?
    • 你有多少表格?你有嵌套的froms吗? (即形式中的形式)
    • 不...只有 1 个表单,但他们的单选按钮有很多问题...我可能认为我应该使用 asp 控件而不是纯 html 添加这些控件
    猜你喜欢
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2016-03-01
    • 1970-01-01
    • 2014-10-30
    • 2015-01-19
    相关资源
    最近更新 更多