2017-04-12 45 views
1

我有一個asp:Table,它填充在TableCells後面的代碼中。需要在TableCell內同時設置屬性和打開鏈接

我開始於this Q&A並能夠設置超鏈接到所需的頁面。但是,我需要設置一個C#屬性作爲鏈接被點擊。

表中的第一列有名稱,我的目標是使名稱可點擊的鏈接打開一個新的窗口或選項卡(不同的URL)並傳遞一個屬性,如described here(在部分:獲取公共屬性值源頁面)供下一頁使用。

我做了財產,但對於我的生活無法弄清楚如何設置屬性,因爲鏈接被點擊。我試過使用Hyperlink,LinkbuttonButton以及在單元格中放置了一個HTML a href字符串。

我覺得LinkBut​​ton是最接近的,但它沒有UseSubmitBehavior選項設置爲false,所以鏈接不會處理。

我認爲這將是一個簡單的過程,設置屬性,然後按照鏈接。

編輯

目前,有下面的代碼,當我點擊按鈕沒有任何反應,它永遠不會進入link_Click事件,p.ID就是我要的屬性設置爲,我想我可以以某種方式從發件人或電子參數中獲取。

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的變量到下一頁。您可以在代碼中把它添加到鏈接

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

現在再次第2頁上,你可以讀到查詢字符串項到一個變量使用落後

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

但是你也可以做一個表單提交到另一個頁面,因此所有表單域項目都可以在另一個頁面上讀取。所以,你會一個LinkBut​​ton添加到第1頁和設置它的PostBackUrl到第2頁。

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

現在,當按鈕被點擊你可以在代碼中張貼的項目頁面2.

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

的背後第三種選擇是在頁面1上執行正常的PostBack,然後設置Session並重定向到Page 2並在那裏讀取Session。

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

假設你需要設置SomePropertysomeValue,然後把瀏覽器someUrl,使用一個LinkBut​​ton,並設置其Click,甚至處理起來是這樣的:

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

如果屬性值不可用的服務器端,你可以在一個隱藏的表單變量傳遞:

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

或者,如果它的設置形式VA問題riable,您可以使用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

鏈接按鈕沒有'UseSubmitBehavior'設置false,所以我不能使用它很不幸,謝謝 – hellyale

+0

沒問題..你可以只使用一個常規的'asp:button'和[style就像鏈接](http ://stackoverflow.com/questions/5214378/button-which-looks-like-link)。 –