私はテーブルがうまく生成されたファイル動的に生成されたHTMLは、のdocument.getElementByIdはヌル
protected void PopulateMemberTable()
{
var guid = "";
string[] selectedColumns = new[] { "MEMBID", "MEMBER_NAME", "BIRTH", "IPA", "HPNAME" };
if (Session["guid"] != null)
guid = Session["guid"].ToString();
StringBuilder html = new StringBuilder();
DataTable dt = MemberSearch(guid, membFirst.Text.ToString(), membLast.Text.ToString(), membDob.Text.ToString(), membId.Text.ToString());
if (dt != null)
{
DataTable new_dt = new DataView(dt).ToTable(false, selectedColumns);
html.Append("<table class='table table-hover data-table'>");
html.Append("<thead>");
html.Append("<tr>");
foreach (DataColumn column in new_dt.Columns)
{
html.Append("<th>");
switch(column.ColumnName.ToString())
{
case "MEMBID":
html.Append("Member ID");
break;
case "MEMBER_NAME":
html.Append("Member Name");
break;
case "BIRTH":
html.Append("DOB");
break;
case "IPA":
html.Append("IPA");
break;
case "HPNAME":
html.Append("Health Plan");
break;
}
html.Append("</th>");
}
//btn column (no header)
html.Append("<th></th>");
html.Append("</tr>");
html.Append("</thead>");
html.Append("<tbody>");
var counter = 0;
foreach (DataRow row in new_dt.Rows)
{
counter++;
string btnId = "\"" + "<%btnMembGrid" + counter.ToString() + ".ClientId%>" + "\"";
html.Append("<tr onclick='document.getElementById(" + btnId + ").click()'>");
var btnValue = new StringBuilder();
foreach(DataColumn column in new_dt.Columns)
{
html.Append("<td>");
html.Append(row[column.ColumnName]);
btnValue.Append(row[column.ColumnName]);
btnValue.Append(";");
html.Append("</td>");
}
html.Append("<td><asp:button runat='server' OnClick='selectMember' CssClass='btn btn-default' style='display:none' value = '"
+ btnValue.ToString() + "' id= 'btnMembGrid" + counter.ToString() + "'/></td>");
html.Append("</tr>");
}
html.Append("</tbody>");
html.Append("</table>");
}
else
html.Append("<div class='alert alert-danger' role='alert'>No Members Found</div>");
membTable.Controls.Add(new Literal { Text = html.ToString() });
}
の後ろに私のコードで動的にHTMLテーブルを生成していますが、今、私は時に一部のサーバー側のコードを呼び出すようにしようとしています戻ります行は、私は、各列に隠し<asp:Button/>
を配置し、各<tr>
タグ
onclick
属性を追加することによって、このタスクを達成しようと
foreach (DataRow row in new_dt.Rows)
{
counter++;
string btnId = "\"" + "<%btnMembGrid" + counter.ToString() + ".ClientId%>" + "\"";
html.Append("<tr onclick='document.getElementById(" + btnId + ").click()'>");
var btnValue = new StringBuilder();
foreach(DataColumn column in new_dt.Columns)
{
html.Append("<td>");
html.Append(row[column.ColumnName]);
btnValue.Append(row[column.ColumnName]);
btnValue.Append(";");
html.Append("</td>");
}
html.Append("<td><asp:button runat='server' OnClick='selectMember' CssClass='btn btn-default' style='display:none' value = '"
+ btnValue.ToString() + "' id= 'btnMembGrid" + counter.ToString() + "'/></td>");
html.Append("</tr>");
}
をクリックします
これは、生成されたHTMLは、DEVコンソールで
どのように見えるかである私は、行をクリックしようとしたときしかし、私は次のエラーメッセージ
を取得し、私は持っています正確に私が間違っていることを理解するのは苦労します。私は、いくつかの入力、またはおそらく代替のアプローチに感謝します。
あなたの間違いの一部は、aspnet Button Controlsを文字列として作成し、それらが動作することを期待しています。これを行うには、動的に作成されたコントロールが必要です。 – VDWWD
コードの代わりにリピーターを使ってテーブルを生成することを考えましたか?あなたのaspボタンはコントロールとして追加されていないので、マークアップに直接書き込んだ場合と同じようにアクセスできない可能性があります。また、あなたは '<%'スクリプトタグを '<%='(Response.Write)タグにしたいと思います。 –
そして、コードの背後にhtmlテーブルを作成すると、おそらく 'GridView'や他のタイプのコントロールがより簡単になります。 – VDWWD