【问题标题】:link button in repeater to pass session variable中继器中的链接按钮以传递会话变量
【发布时间】:2012-08-07 15:47:07
【问题描述】:

我有一个列出我的自定义数据的中继器,现在我要做的是使用 asp:linkbutton 将变量从一个页面传递到另一个页面。我遇到的问题是,当我在子例程中调用我的链接按钮时,它没有被识别。我查看了Can't find a link button in a repeater,但我认为它不会在这种情况下起作用。这是我的代码:

    <asp:Repeater ID="rptList" runat="server" EnableViewState="false" DataSourceID="SqlDataSource3">
<ItemTemplate>
    <div>
    <p>
    <b>Title: </b> <asp:LinkButton ID="lbnCookieVar" OnClick="lbnCookieVar_Click" Text='<%# Eval("Job_Title")%>' runat="server" /> <br />
    <b>Status: </b><%# Eval("Status")%><br />
    <b>Department: </b><%# Eval("Department")%><br />
    <b>Date Position Available: </b><%# Eval("Date_Position_Available")%><br />
    </p>
    </div>
</ItemTemplate>
</asp:Repeater>

下面是代码

     protected void lbnCookieVar_Click(object sender, EventArgs e)
{
    Session["Data"] = lbnCookieVar.Text;
    Response.Redirect("Application.aspx");
}

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您需要通过函数的“sender”参数访问链接按钮:

    protected void lbnCookieVar_Click(object sender, EventArgs e)
    {
        Session["Data"] = (sender as LinkButton).Text;
        Response.Redirect("Application.aspx");
    }
    

    【讨论】:

    • 我试过了,但点击链接按钮时 IE9 没有任何反应
    • 修复了错误,但点击链接按钮时没有任何反应
    【解决方案2】:

    很丑,你让这种方式变得比你需要的更困难。

    您为什么不使用Repeater 的ItemCommand 例程来获取它?然后你只需传递你想要做的命令参数。

    <asp:Repeater ID="rptList" runat="server" EnableViewState="false" 
        DataSourceID="SqlDataSource3" OnItemCommand="rptList_ItemCommand">
    <ItemTemplate>
        <div>
        <p>
        <b>Title: </b> <asp:LinkButton ID="lbnCookieVar" CommandText="click" CommandArgument='<%# Eval("Job_Title")%>' Text='<%# Eval("Job_Title")%>' runat="server" /> <br />
        <b>Status: </b><%# Eval("Status")%><br />
        <b>Department: </b><%# Eval("Department")%><br />
        <b>Date Position Available: </b><%# Eval("Date_Position_Available")%><br />
        </p>
        </div>
    </ItemTemplate>
    </asp:Repeater>
    

    代码背后:

    我不知道是谁更改了我的代码,但你错了。如果您按原样执行此操作,这就是您执行此操作的方式。我错误地在“click”周围加上了单引号,而应该是双引号。

    protected void rptList_ItemCommand(object sender, CommandEventArgs e)
    {
       if (e.CommandName == "click")
       {
           Session["Data"] = e.CommandArgument.ToString();
           Response.Redirect("Application.aspx");
       }
    }
    

    【讨论】:

    • 链接按钮仍然不会触发
    • 您是否在aspx页面的代码中添加了OnItemCommand="rptList_ItemCommand"?
    • 是的。仍然没有起火...但是我确实找到了答案并感谢 TON 的帮助
    【解决方案3】:

    试试这个,应该可以的:

    Session["Data"] = (sender as LinkButton).Text;
    

    查看全文:Change text of a linkbutton in a repeater

    【讨论】:

      【解决方案4】:

      在转发器/列表视图中使用控件通常会有点奇怪。我认为在您的情况下,您可以执行以下操作:

      Session["Data"] = ((LinkButton)sender).Text;
      

      【讨论】:

      • 我试过了,但愚蠢的浏览器不会重定向到 application.aspx,就像它应该让我测试它一样。
      【解决方案5】:
      SessionStorage.LinkButtonText = Session["Data"] = ((LinkButton)sender).Text;
      
      public class SessionStorage
      {
          public Static String LinkButtonText
          {
              get
              {
                  if (System.Web.HttpContext.Current.Session["LinkButtonText"] == null)
                      return String.Empty;
                  return Convert.ToString(
                             System.Web.HttpContext.Current.Session["LinkButtonText"]);
              }
              set
              {
                  System.Web.HttpContext.Current.Session["LinkButtonText"] = value;
              }
          }
      }
      

      【讨论】:

        【解决方案6】:

        您好,这就是我修复它的方法!

        <asp:Repeater ID="rptList" runat="server" EnableViewState="false" DataSourceID="SqlDataSource3">
        <ItemTemplate>
            <div>
            <p>
            <b>Title: </b> <a href="CareerSummary.aspx?Job_Title=<%# Eval("Job_Title") %>&num=<%# Eval("num") %>"><%# Eval("Job_Title") %></a><br />
            <b>Status: </b><%# Eval("Status")%><br />
            <b>Department: </b><%# Eval("Department")%><br />
            <b>Date Position Available: </b><%# Eval("Date_Position_Available")%><br />
            </p>
            </div>
        </ItemTemplate>
        </asp:Repeater>
        

        你想要发送变量的页面后面的代码:

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
        
                lblRow.Text = Request.QueryString["num"];
            }
        
        
        }
        

        此方法必须在负载中才能工作

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-29
          • 2012-04-07
          • 2012-09-11
          • 1970-01-01
          • 2019-10-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多