0

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

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

6 回答 6

2

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

protected void lbnCookieVar_Click(object sender, EventArgs e)
{
    Session["Data"] = (sender as LinkButton).Text;
    Response.Redirect("Application.aspx");
}
于 2012-08-07T15:49:53.367 回答
1

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

你为什么不使用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”应该是双引号时,我错误地在“click”周围加上了单引号。

protected void rptList_ItemCommand(object sender, CommandEventArgs e)
{
   if (e.CommandName == "click")
   {
       Session["Data"] = e.CommandArgument.ToString();
       Response.Redirect("Application.aspx");
   }
}
于 2012-08-07T16:37:30.187 回答
1

试试这个,应该工作:

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

完整的故事请参见此处:更改中继器中链接按钮的文本

于 2012-08-07T15:50:57.877 回答
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;
        }
    }
}
于 2012-08-07T16:16:59.353 回答
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"];
    }


}

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

于 2012-08-10T18:34:24.997 回答
0

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

Session["Data"] = ((LinkButton)sender).Text;
于 2012-08-07T15:50:48.857 回答