在listview中获取Label的值

时间:2013-12-13 14:52:24

标签: c# html asp.net listview

我有一个带有隐形标签的列表视图来存储类别ID。 我想要做的是在按钮点击时将标签的文本分配给cookie或会话。 问题是当我尝试在listview之外显示值时,我的cookie总是为null。 这是我的aspx代码:

<asp:ListView runat="server" ID="catListView" DataSourceID="CategoriesDataSource" >
            <EmptyDataTemplate>No DataFound</EmptyDataTemplate>
            <ItemTemplate>
                <div class="service" style="margin-bottom:10px;width:230px;">               
                     <h4 style="font-family:Corbel;" ><%#Eval("CatName") %></h4>
                    <asp:Label runat="server" Visible="false" ID="lblcat"><%#Eval("CatId") %></asp:Label>
                    <asp:Button runat="server" ID="btnTest" Text="View Items" OnClick="btnTest_Click" />
                </div>
            </ItemTemplate>
        </asp:ListView>

我的C#代码:

protected void btnTest_Click(object sender, EventArgs e)
        {
            Response.Cookies["cat"].Value = "test";
            foreach (ListViewItem item in catListView.Items)
            {
                Label catLabel = (Label)item.FindControl("lblcat");
                Response.Cookies["cat"].Value = catLabel.Text.ToString();
            }

        }

任何帮助将不胜感激。 thx提前

萨姆

3 个答案:

答案 0 :(得分:2)

当您调用Button click事件时,听起来您的ListView可能不是数据绑定。

我建议您使用the ItemCommand event handler。它最适合这种类型的处理。更新ListView声明以处理该事件:

<asp:ListView runat="server" ID="catListView" DataSourceID="CategoriesDataSource
    OnItemCommand="catListView_ItemCommand" >

注意:不要忘记从Button中删除“OnClick”事件处理程序

然后编写你的偶数处理程序代码:

protected void catListView_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    Label catLabel = (Label)e.Item.FindControl("lblcat");
    Session["currentCatLabelText"] = catLabel.Text;
}

这样做的好处是不会遍历所有ListView项目,只需查看您单击的项目。

答案 1 :(得分:2)

希望这会有所帮助:)

string[] catvals = new string[catListView.Items.Count];

            for (int i =0; i< catListView.Items.Count; i++)
            {
                Label catLabel = (Label)catListView.FindControl("lblcat");
                catvals[i] = catLabel.Text;
            }
            for(int i = 0 ; i < catvals.Length; i++)
            {
                Response.Cookies["cat"+ i.ToString()].Value = catvals[i].ToString();
            }

答案 2 :(得分:0)

实际上,您正尝试在一个密钥中添加cat。我的意思是你在循环中覆盖值。

您应该以这种方式更改代码:

在您的C#代码中:

protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            HttpCookie testCokkie = new HttpCookie("ExampleCookie");
            testCokkie.Expires = DateTime.Now.AddDays(5);
            Response.Cookies.Add(testCokkie);

        }
    }



 protected void btnTest_Click(object sender, EventArgs e)
    {
        HttpCookie ExampleCookie = Request.Cookies["ExampleCookie"];
        int tempIndex = 0;
        foreach (ListViewItem item in catListView.Items)
        {
            Label catLabel = (Label)item.FindControl("lblcat");
            ExampleCookie["cat" + tempIndex.ToString()] = catLabel.Text.ToString();
            tempIndex = tempIndex + 1;
        }
    }

阅读此Cookie

HttpCookie exampleCookie = Request.Cookies["ExampleCookie"];
if (exampleCookie != null)
{
    int tempIndex = 0;
    foreach (ListViewItem item in catListView.Items)
    {
        Response.Write("<br/>" + exampleCookie["cat" + tempIndex.ToString()]);
        tempIndex = tempIndex + 1;
    }
}