2016-04-17 12 views
2

「ユーザーの選択」ページを作成しようとしています。このページでは、ユーザーデータをデータベースから動的に取得し、データベース内の各ユーザーが選択できるリンクを生成します。リンクがクリックされると、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(); 
} 

そして、イベントハンドラはのようになり

+0

ページ全体を動的に生成するのか、すでに存在する 'container' divを埋めますか?マークアップのTS? – ConnorsFan

+0

@ConnorsFan動的に作成される唯一の部分は、コンテナdiv内のユーザーです。残りのページは既にHTMLマークアップ内に存在します。 – user3530169

答えて

4

あなたが望む結果を得るために、ListViewコントロールを使用することができますあなたが既に持っているもの:

protected void lnkUser_Click(object sender, EventArgs e) 
{ 
    // Process user data and redirect 
} 
+0

素晴らしい!私が試していたものとは全く異なるアプローチですが、それは私が望むのと同じように機能します。私は実際にASP .NETにそのようなコントロールが存在することは認識していませんでした。助けてくれてありがとう! – user3530169

関連する問題