2012-10-30 32 views
0

我发现奇怪的是,当我检查一些复选框(生成的HTML代码)时,子函数没有提醒(或显示消息)正在检查哪个复选框。生成HTML代码的Web应用程序由复选框而不是显示消息组成。 (Asp.net,C#)

我错过了什么吗?

里面的WebForm.aspx

<script type="text/javascript"> 

function sub() 
{ 

    for (i=0; i<arrChecks.length; i++) 
    { 
     var attribute = arrChecks[i].getAttribute("xid") 
     if (attribute == elementName) 
     { 
      // if the current state is checked, unchecked and vice-versa 
      if (arrChecks[i].checked) 
      { 
       arrChecks[i].checked = false; 
      } else { 
       arrChecks[i].checked = true; 
       alert("Checked!"); 
      } 

     } else { 
      arrChecks[i].checked = false; 
     } 
    } 

} 


</script> 

的WebForm.cs内

protected void ButtonCheckDate_Click(object sender, EventArgs e) 
    { 
     SqlConnection conn = ConnectDB("Data Source=JACKSERVERA;Initial Catalog=tablea;User Id=tableuser;Password=tablepassword"); 


     if ((TextBox2.Text != null) && (TextBox2.Text != "")) 
     { 
      try 
      { 
       String res = ""; 

       SqlCommand command = conn.CreateCommand(); 
       SqlDataReader reader; 
       command.CommandType = System.Data.CommandType.Text; 
       command.CommandText = "SELECT * from overviewtable where [dated] = @PDATED"; 
       command.Parameters.AddWithValue("@PDATED", TextBox2.Text); 
       command.Connection = conn; 
       sqlstmt.Text = command.CommandText; 

       conn.Open(); 
       reader = command.ExecuteReader(); 

       if (reader.HasRows) 
       { 
        res = res + "<form name=\"input\" runat=\"server\"><table border=1>"; 
        while (reader.Read()) 
        { 
         res = res + "<tr>"; 


         string thetime = (string)reader["time"]; 
         string thevenue = (string)reader["venue"]; 
         int numfreeseat = (int)reader["freeseat"]; 

         int occupiedseat = 0; 

         SqlCommand bkcommand = conn.CreateCommand(); 
         SqlDataReader bookinglist; 
         bkcommand.CommandType = System.Data.CommandType.Text; 
         bkcommand.CommandText = "SELECT count(*) from venuea where [dated] = @PDATED"; 
         bkcommand.Parameters.AddWithValue("@PTIME", thetime); 
         bkcommand.Connection = conn; 
         sqlstmt.Text = bkcommand.CommandText; 
         bookinglist = bkcommand.ExecuteReader(); 

         while (bookinglist.Read()) 
         { 
          if (bookinglist.HasRows) 
          { 
           occupiedseat = (int)bookinglist.GetValue(0); 
          } 
         } 


         int leftnumofseat = numfreeseat - occupiedseat; 

         string color = ""; 
         Boolean fullyoccupied = false; 

         if (leftnumofseat > 0) 
         { 
          if (leftnumofseat == numfreeseat) 
          { 
           // white 
           color = "#FFFFFF"; 
          } 
          else 
          { 
           // light gray - partial occupied 
           color = "#B8B8B8"; 
          } 
         } 
         else 
         { 
          // dark gray - fully occupied 
          color = "#505050"; 
          fullyoccupied = true; 
         } 


         res = res + "<td bgcolor=\"" + color + "\">"; 
         res = res + "Available: " + leftnumofseat + "/" + numfreeseat + ""; 
         res = res + "</td>"; 

         string checkboxval = TextBox2.Text + "_" + thetime + "_" + thevenue; 

         res = res + "<td>"; 
         if (fullyoccupied == false) 
         { 
          res = res + "<input type=\"checkbox\" name=\"xid\" value=\"" + checkboxval + "\" runat=\"server\" />"; 
         } 
         else 
         { 
          res = res + "FULL"; 
         } 
         res = res + "</td>"; 

         res = res + "</tr>"; 
        } 
        res = res + "</table><input type=\"submit\" value=\"Submit\" OnClick=\"sub\" runat=\"server\"></form>"; 
       } 
       LabelDateSelection.Text = res; 

       conn.Close(); 



      } 
      catch (Exception err) 
      { 
       errormsg.Text = err.Message; 
      } 
     } 
     else 
     { 
      LabelDateSelection.Text = "Enter Date!"; 
     } 



    } 

回答

1

取出这部分从你的代码&看看它是否工作runat=\"server\"

我我不确定你是否可以创建和ASP.net服务器控制ol,因为您正在尝试&您正在向客户端发送输出,而runat=\"server\"由服务器呈现。检查你的HTML代码&看看它看起来如何。

动态创建HTML控件或创建简单的HTML控件,如果这可以适用于您的情况。

看看例子,如何务实地创建控件

http://msdn.microsoft.com/en-us/library/kyt0fzt1%28v=vs.100%29.aspx

+0

是的,我试着删除'runat = \“服务器\”'但它仍然不起作用。我需要动态地使用复选框列表创建表,因此我无法使用简单的HTML代码。 – Jack

+0

@KnowledgeSeeker是正确的,你不能使用JS创建ASP.net控件,所有的ASP控件都必须通过代码创建,才能正确注册为可用。 –

+0

对不起,我使用CS动态创建了我的HTML表格和HTML复选框。我没有使用Javascript来动态创建它们。问题是我需要动态创建,以便我可以检测到哪个复选框被选中。 (另一个问题是可能有200多个复选框,当然,我不想使用静态HTML来逐个创建它们)。我想在asp.net中是否有其他方法可以帮助我动态地创建复选框。 – Jack

0

除了由KnowledgeSeeker提出的观点,你不能在风格创建ASP控制。

您可以通过使用FindControl方法来定位元素,然后从它还是在C#中获得的价值得到了创建复选框的值添加类似代码:

for (int i = 0; i < 5; i++) 

{ 

CheckBox chk = new CheckBox(); 

chk.ID = Convert.ToString(i); 

chk.Text = Convert.ToString(i); 

form1.Controls.Add(chk); 

} 

在这种情况下,你从0循环到5并创建复选框并将这些控件添加到窗体。

+0

感谢Ryan的帮助,但随时可能有1到200多个复选框(如动态创建并取决于数据库记录)。请注意,我也希望找到选中的复选框的值,以便我可以找到最终用户选择的记录。 – Jack

+0

那么是的,然后你循环但是很多记录被返回,0到5只是示例代码。如果你已经为200个盒子设置了命名约定,你可以在一个循环中寻找checkbox_i - 我是整数。 –

相关问题