2013-12-13 4 views
1

카테고리 ID를 저장하기 위해 보이지 않는 레이블이있는 listview가 있습니다. 내가하고 싶은 일은 버튼 클릭시 쿠키 또는 세션에 라벨의 텍스트를 할당하는 것입니다. 문제는 내 쿠키가 listview 외부의 값을 표시하려고 할 때 항상 null입니다.listview의 Label 값을 얻으십시오.

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

     } 

여기 내 영문 코드입니다. 사전에 들으

+0

어떻게 당신이'ListView' 외부를 표시하려고? 또한 catLabel.Text는 문자열이므로'.ToString()'=)을 호출 할 필요가 없습니다. – jadarnel27

+0

@ jadarnel27 aspx 페이지에서 이렇게 : <% = Request.Cookies [ "cat"]. 값 %> – Sam

답변

2

당신의 ListView가되지 않을 수도 있습니다처럼 소리를 읽으려면 Button click 이벤트가 호출 될 때 데이터 바인딩.

the ItemCommand event handler을 사용하는 것이 좋습니다. 이 유형의 처리에 가장 적합합니다.

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

참고 :이처럼도 핸들러 코드를 버튼에서

을 "의 OnClick"이벤트 핸들러를 제거하고 작성하는 것을 잊지 마세요 : 그 이벤트를 처리하기 위해 ListView를 선언 업데이트

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

또한 모든 ListView 항목을 반복하지 않고 클릭 한 항목 만보고하는 장점이 있습니다.

+1

감사합니다. 내 질문을 게시하기 전에 이것에 대해 생각했습니다. 하지만 OnClick 이벤트에 대한 다른 코드가 있는데 listview에 추가 할 수 있습니까? 어리석은 질문 인 것 같지만, 전에 Itemcommand를 사용하지 않았습니다. – Sam

+0

@Samira 무슨 뜻인지 이해가 안됩니다. 모든 OnClick 이벤트를 제거 할 필요는 없습니다. 그러나 뭔가가 ListView 안에 있으면 ItemCommand를 사용해야합니다. – jadarnel27

+1

당신은 버튼에서 Onclick 이벤트 핸들러를 제거해야한다고 말했습니다.미안 이벤트 ListView 관련된 코드를 제거 할 생각. 도움을 주셔서 감사합니다, 나는 그것을 시도 할 것이다 :) – Sam

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

이 쿠키

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

감사합니다. 당신의 도움을 위해, 나는 아직 코드를 시도하지 않았지만 단지 코멘트가 있습니다. response.write에 쿠키를 표시하고 싶지 않습니다. 데이터베이스의 프로 시저에서 매개 변수로 사용합니다. null이 아닌지 확인하기 위해 표시하고 싶습니다! 그래서 쿠키를 읽기 쿠키의 레이블에 지정할 수 있습니까? – Sam

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