2017-04-12 49 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)。 –