转发器中的链接按钮传递会话变量

时间:2012-08-07 15:47:07

标签: asp.net

我有一个转发器列出了我的自定义数据,现在我想要做的是使用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");
}

6 个答案:

答案 0 :(得分:2)

您需要通过函数的“sender”参数访问linkbutton:

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

答案 1 :(得分:1)

试试这个,应该有效:

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

请点击此处查看完整故事:Change text of a linkbutton in a repeater

答案 2 :(得分:1)

丑陋,你这样做比你需要的更困难。

为什么不使用Repeater的ItemCommand例程来接这个?然后你只需传递你想要做的CommandArgument。

<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");
   }
}

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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;
        }
    }
}

答案 5 :(得分:0)

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

<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"];
    }


}

此方法必须处于负载状态