【问题标题】:Need to set Property and open link at same time inside a TableCell需要在 TableCell 中同时设置属性和打开链接
【发布时间】:2017-09-08 16:06:16
【问题描述】:

我有一个asp:Table,它使用 TableCells 填充在后面的代码中。

我从this Q&A 开始,能够设置指向所需页面的超链接。但是,我需要在单击链接时设置一个 C# 属性。

表格的第一列有名称,我的目标是使名称可点击链接打开一个新窗口或选项卡(不同的 URL)并传递像 described here 这样的属性(在部分:获取公共属性值从源页面)供下一页使用。

我创建了该属性,但在单击链接时,我终生无法弄清楚如何设置该属性。我尝试使用HyperlinkLinkbuttonButton 以及在单元格中放置一个HTML a href 字符串。

我认为 LinkBut​​ton 是最接近的,但它没有将 UseSubmitBehavior 选项设置为 false,因此无法处理链接。

我认为这将是一个简单的过程,设置属性然后点击链接。

编辑

目前,有下面的代码,当我单击按钮时没有任何反应,它永远不会进入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");
}

【问题讨论】:

    标签: c# asp.net hyperlink


    【解决方案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 并重定向到第 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");
    }
    

    【讨论】:

      【解决方案2】:

      假设您需要将 SomeProperty 设置为 someValue,然后将浏览器发送到 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);
      }
      

      或者,如果设置表单变量有问题,您可以使用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");
      }
      

      【讨论】:

      • 链接按钮没有UseSubmitBehavior 设置为false,所以很遗憾我不能使用它,谢谢
      • 没问题..你可以使用普通的asp:buttonstyle it like a link
      猜你喜欢
      • 2013-01-13
      • 1970-01-01
      • 2020-07-29
      • 2012-09-06
      • 1970-01-01
      • 2011-02-22
      • 2015-03-14
      • 1970-01-01
      • 2020-06-24
      相关资源
      最近更新 更多