2017-04-12 10 views
1

asp:Tableには、TableCellsのコードが埋め込まれています。TableCell内で同時にプロパティとリンクを開く必要があります

私はthis Q&Aで開始し、目的のページへのハイパーリンクを設定することができました。ただし、リンクがクリックされるとC#プロパティを設定する必要があります。

テーブルの最初の列には名前がありますが、私の目標は新しいウィンドウまたはタブ(別のURL)を開き、described hereのようなプロパティを渡す名前をクリック可能なリンクにすることでした。ソースページ)を使用して次のページを使用します。

私はプロパティを作成しましたが、私の人生はリンクがクリックされたときにプロパティを設定する方法を理解できません。 Hyperlink,Linkbutton、およびButtonを使用して試したところ、セルにHTML a href文字列を配置しました。

私はLinkBut​​tonが最も近いと思われましたが、リンクが処理されないようにfalseに設定するUseSubmitBehaviorオプションがありませんでした。

これは簡単なプロセスで、プロパティを設定してからリンクをたどると考えました。現在、EDIT

、私は何も起こりませんボタンをクリックすると、以下のコードを持って、それはlink_Clickイベントに入ることはありませんが、p.IDは、私はプロパティを設定するつもり何ですが、私は私を考えます送信者またはeパラメータから何らかの形でそれを得ることができます。

foreach (Person p in people) 
{ 
       DivDetail.Visible = true; 
       TableRow tRow = new TableRow(); 
       Table2.Rows.Add(tRow); 

       TableCell tCell = new TableCell(); 
       Button link = new Button(); 
       link.Text = p.FullName; 
       link.ToolTip = p.ID; 
       link.UseSubmitBehavior = false; 
       link.Attributes.Add("OnClick", "link_Click"); 


       tCell.Controls.Add(link); 
       tCell.Font.Bold = true; 

       tRow.Cells.Add(tCell); 
     //other cells of row populated 
} 

void link_Click(object sender, EventArgs e) 
{    
     Response.Redirect("/Orig.aspx"); 
} 

答えて

1

私はあなたがQueryStringアイテムを探していると思います。あなたは、クリックされているURLに変数を入れて、その変数を他のページで読むことができます。

ページ1では、urlでハイパーリンクを作成し、myVariableという変数を次のページに送信したいとします。あなたは

if (Request.QueryString["myVariable"] != null) 
{ 
    string myVariable = Request.QueryString["myVariable"]; 
} 

の後ろにコードで使用するために変数に再びあなたがそのクエリ文字列の項目を読むことができる2ページにリンクを今すぐ

HyperLink link = new HyperLink(); 
link.NavigateUrl = "/Page2.aspx?myVariable=" + myVariable; 
link.Text = "My Link"; 

に追加することができますしかし、あなたはまたにフォームポストを行うことができます別のページでは、フォームフィールドのすべての項目を他のページで読み取ることができます。だから、ボタンがクリックされたときに今、あなたはページの背後にあるコードでの掲載項目2.

foreach (string key in Request.Form.Keys) 
{ 
    Response.Write(key + ": " + Request.Form[key] + "<br>"); 
} 

を得ることができます1ページにLinkBut​​tonコントロールを追加し、ページにPostBackUrl 2.

LinkButton linkbutton = new LinkButton(); 
linkbutton.PostBackUrl = "/Page2.aspx"; 
linkbutton.Text = "My LinkButton"; 

だ設定します3番目の選択肢は、Page 1の通常のPostBackを実行してから、セッションを設定してページ2にリダイレクトし、そこでセッションを読むことです。

LinkButton linkbutton = new LinkButton(); 
linkbutton.Click += Linkbutton_Click; 
linkbutton.Text = "My LinkButton"; 


private void Linkbutton_Click(object sender, EventArgs e) 
{ 
    Session["myVariable"] = myVariable; 
    Response.Redirect("/Page2.aspx"); 
} 
+0

私は自分の答えを更新しました。 – VDWWD

1

あなたがLinkBut​​tonコントロールをsomeValueSomePropertyを設定し、someUrlにブラウザを送り、使用する必要があると仮定すると、設定されたClickも、このようにアップハンドラ:プロパティ値がない場合には

void MyLinkButton_Click(object sender, EventArgs e) 
{ 
    SomeProperty = someValue; 
    Response.Redirect(someUrl); 
} 

サーバー側の利用可能、隠しフォーム変数でそれを渡すことができます:それはフォームのVAを設定する問題だ場合

void MyLinkButton_Click(object sender, EventArgs e) 
{ 
    SomeProperty = Request.Form["SomeField"];  
    Response.Redirect(someUrl); 
} 

あるいは、あなたはOnCommand Methodを使って値を設定することができます。あなたがテーブルの結合としてそれをこのように設定します。

protected void Table_ItemDataBound(object sender, EventArgs e) 
{ 
    LinkButton lb = e.Item.FindControl("MyLinkID") as LinkButton; 
    lb.CommandArgument = someValue; 
} 

をし、それをこのように読む:あなたが(もう少し理にかなって)先のページのプロパティを設定する必要がある場合

void MyLinkButton_Click(object sender, EventArgs e) 
{ 
    SomeProperty = e.CommandArgument; 
    Response.Redirect(someUrl); 
} 

をあなたは...一時的にセッションに保存する

void MyLinkButton_Click(object sender, EventArgs e) 
{ 
    Session["Temp"] = Request.Form["SomeField"];  
    Response.Redirect(someUrl); 
} 

を持っている...そして、それを設定します:

//This is the load event handler for the second page 
public void Page_Load() 
{ 
    this.SomeProperty = Session["Temp"]; 
    Session.Remove("Temp"); 
} 
+0

リンクボタンにfalseを設定するためのUseSubmitBehaviorはありませんので、残念ながら使用することはできません。 – hellyale

+0

問題ありません。普通の 'asp:button'と[http: ://stackoverflow.com/questions/5214378/button-which-looks-like-link)。 –

関連する問題