「ユーザーの選択」ページを作成しようとしています。このページでは、ユーザーデータをデータベースから動的に取得し、データベース内の各ユーザーが選択できるリンクを生成します。リンクがクリックされると、C#関数が呼び出されてクッキーが作成され、ユーザーがリダイレクトされます。プログラムでC#関数を実行するためのHTMLアンカーの作成
コードは、データベースからユーザーを正しく引き出し、リンクを生成しますが、リンクは機能しません。ここにリンクを生成し、C#のコードは次のとおりです。ここで
String sqlStatement = "SELECT * FROM TUsers";
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand comm = new SqlCommand(sqlStatement, conn);
conn.Open();
SqlDataReader Reader = comm.ExecuteReader();
while (Reader.Read())
{
container.InnerHtml += "<a runat='server' href='#' onServerClick='UserButton_Click' > <div class='users'> <p>" + Reader["FirstName"] + " " + Reader["LastName"] + "</p> </div> </a>";
}
Reader.Close();
conn.Close();
は、生成されたページのHTMLソースコードは次のとおりです。
<div id="container"><a runat='server' href='#' onServerClick='UserButton_Click' > <div class='users'> <p>User 1</p> </div> </a>
リンクがクリックされたときにバックエンドのC#コードは、この質問には無関係です。ブレークポイントを使用すると、呼び出されるはずの関数が呼び出されることはありません。
私は実際に適切な機能を実行していないonServerClickでHTMLアンカーを使用しようとしましたが、<asp:LinkButton>
アイテムを使用しようとしましたが、経由で生成されたため正しく解析されませんでしたcontainer.InnerHtml。
<asp:ListView ID="lvUsers" runat="server">
<ItemTemplate>
<div>
<asp:LinkButton ID="lnkUser" runat="server" OnClick="lnkUser_Click" Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
</div>
</ItemTemplate>
</asp:ListView>
リストビューのデータソースは次のように設定することができます:
using (SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
using (SqlCommand comm = new SqlCommand("SELECT * FROM TUsers", conn))
{
SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "Users");
lvUsers.DataSource = ds.Tables[0];
lvUsers.DataBind();
}
そして、イベントハンドラはのようになり
ページ全体を動的に生成するのか、すでに存在する 'container' divを埋めますか?マークアップのTS? – ConnorsFan
@ConnorsFan動的に作成される唯一の部分は、コンテナdiv内のユーザーです。残りのページは既にHTMLマークアップ内に存在します。 – user3530169