2016-06-26 11 views
-2

選択した数に応じて動的に行を追加しましたが、データベースに送信しようとした後、オンボタンクリックすると、htmlファイルにあらかじめ定義されているヘッダー行だけが返されます。私は実際にそれらから生成されたデータが必要なので、私はこれらの動的に作成された行を読み取ることができる方法があります。ボタンをクリックしたあとにasp.netを使用したときにJavaScriptから動的に追加されたテーブル行を含めるには

function OptionCount(start, cnt) { 
 

 
    var elems = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; 
 

 
    var x = cnt; 
 
    var y = start; 
 
    var i; 
 

 

 
    for (i = start; i < x; i++) { 
 

 

 
    $('.ObjectiveGen').append($('<tr style="width:100%; height:10%;" class="datarow" name="tm"><td><input type="checkbox" style="position:relative;" class="ia"></td><td style="width:15%;">' + elems[i] + '</td><td id="inp" style="width:70%;"><input type="text" style="width:100%;"/></td><td style="width:15%;"><input type="radio" name="answerradio" /></td></tr>')) 
 

 
    $('tr td:not(#inp)').addClass("mitu_center"); 
 

 

 
    } 
 

 

 
}
<table runat="server" id="objtable" class="ObjectiveGen" border="1" cellpadding=5 cellspacing=2 style="width: 100%; height: auto;"> 
 

 
    <tr id="header_row"> 
 
    <th> 
 
     <input type="checkbox" id="mainchk" /> 
 
    </th> 
 
    <th>Option Value 
 
    </th> 
 

 
    <th>Answer 
 
    </th> 
 

 
    <th>Is Answer 
 
    </th> 
 
    </tr> 
 

 
</table>

asp.netコードページがサーバーにポストバックされたページのgetの再構築や価値観れる毎回ここ

protected void mn_ServerClick(object sender, EventArgs e) 
{ 



    HtmlTableRowCollection htr = objtable.Rows; 

    i = htr.Count; 

    foreach (HtmlTableCell tablecell in htr) 
    { 
     answer = tablecell.InnerText; 
    } 

    qt.InnerHtml ="Qtn: " + i.ToString() + htr[0].Cells[1].InnerText; 

} 

enter code here 

enter image description here

答えて

1

を示します評価することができる。コントロールはクライアント側(javascriptを介して)に追加したので、サーバー側では新しいコントロールとその処理方法を知らないため、コントロールをサーバー側で使用することはできません。

ASP.NET Repeater controlを使用することもできます。このコントロールは非常に柔軟性が高く、ネイティブHTMLテーブルと同じように見た目とスタイルを設定することができ、投稿後にサーバーのTextBox値にアクセスできます。

の背後にあるコード:

public partial class TableRepeaterExample : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      var answer1 = new Answer { Option = "A", AnswerText = "" }; 
      var answer2 = new Answer { Option = "B", AnswerText = "" }; 
      var answer3 = new Answer { Option = "C", AnswerText = "" }; 

      Repeater1.DataSource = new List<Answer> { answer1, answer2, answer3 }; 
      Repeater1.DataBind(); 
     } 
    } 
    protected void mn_ServerClick(object sender, EventArgs e) 
    { 
     foreach(RepeaterItem item in Repeater1.Items) 
     { 
      TextBox txtAnswer = item.FindControl("txtAnswer") as TextBox; 
      if(txtAnswer != null) 
      { 
       string answer = txtAnswer.Text; 
      } 
     } 
    } 
} 

public class Answer 
{ 
    public string Option { get; set; } 
    public string AnswerText { get; set; } 
} 

.ASPX:

<body> 
    <form id="form1" runat="server"> 
     <table> 
      <thead> 
       <tr> 
        <th>Option</th> 
        <th>Answer</th> 
       </tr> 
      </thead> 
      <tbody> 
       <asp:Repeater ID="Repeater1" runat="server"> 
        <ItemTemplate> 
         <tr> 
          <td><%# Eval("Option") %></td> 
          <td> 
           <asp:TextBox ID="txtAnswer" runat="server" Text='<%# Eval("AnswerText") %>'></asp:TextBox> 
          </td> 
         </tr> 
        </ItemTemplate> 
       </asp:Repeater> 
      </tbody> 
     </table> 
     <asp:Button ID="Button1" runat="server" Text="Button" OnClick="mn_ServerClick" /> 
    </form> 
</body> 
関連する問題