2008-10-06 4 views
1

현재 QueryString을 통해 전달 된 ID를 기반으로 데이터베이스에서 데이터를 가져 오는 ASP.NET의 DetailsView가 있습니다. 내가 지금하고있는 일은 사용자가 ButtonField 또는 HyperLinkField를 클릭 할 때 생성되는 새로운 쿠키에서 동일한 ID를 사용하는 것입니다.ButtonField 또는 HyperLinkField를 사용하여 ASP.NET에 쿠키 작성

은 내가이 .ASPX에있는 것은 이것이다 :

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="ArtID" 
    DataSourceID="AccessDataSource1" Height="50px" Width="125px"> 
    <Fields> 
     <asp:ImageField DataAlternateTextField="Title" DataImageUrlField="FileLocation"> 
     </asp:ImageField> 
     <asp:BoundField DataField="ArtID" HeaderText="ArtID" InsertVisible="False" ReadOnly="True" 
      SortExpression="ArtID" /> 
     <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> 
     <asp:BoundField DataField="ArtDate" HeaderText="ArtDate" SortExpression="ArtDate" /> 
     <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> 
     <asp:BoundField DataField="FileLocation" HeaderText="FileLocation" SortExpression="FileLocation" /> 
     <asp:BoundField DataField="Medium" HeaderText="Medium" SortExpression="Medium" /> 
     <asp:BoundField DataField="Location" HeaderText="Location" SortExpression="Location" /> 
     <asp:BoundField DataField="PageViews" HeaderText="PageViews" SortExpression="PageViews" /> 
     <asp:HyperLinkField DataNavigateUrlFields="ArtID" DataNavigateUrlFormatString="Purchase.aspx?ArtID={0}" 
      NavigateUrl="Purchase.aspx" Text="Add To Cart" /> 
     <asp:ButtonField ButtonType="Button" DataTextField="ArtID" Text="Add to Cart" CommandName="btnAddToCart_Click" /> 
    </Fields> 
</asp:DetailsView> 

reguler의 asp.net 버튼과 같은 사용 :

<asp:Button ID="btnAddArt" runat="server" Text="Add To Cart" /> 

은 내가 VB에서 이런 식으로 뭔가를 할 것이다 :

Protected Sub btnAddArt_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAddArt.Click 
    Dim CartArtID As New HttpCookie("CartArtID") 
    CartArtID.Value = ArtID.DataField 
    CartArtID.Expires = Date.Today.AddDays(0.5) 
    Response.Cookies.Add(CartArtID) 

    Response.Redirect("Purchase.aspx") 
End Sub 

그러나 ButtonField 대신 ButtonField에이 방법을 적용하는 방법을 알아낼 수 없습니다. 내가 신분증을 줄 수는 없어.

쿠키에 추가해야하는 ID는 첫 번째 BoundField의 ArtID입니다.

어떻게하면 좋을지에 대한 아이디어 나 조언을 보내 주시면 대단히 감사하겠습니다.

또는 HyperLinkField 또는 일반 단추를 사용하여 수행 할 수 있으면 좋겠지 만 정규 단추를 사용하여 DetailsView 내에서 ID에 액세스하는 데 문제가 있습니다.

감사

답변

1

Button 클래스의 CommandName 및 CommandArgument 매개 변수를 사용하십시오. CommandName을 지정하면 ItemCommand 이벤트가 노출됩니다. 여기서 CommandName을 확인하고 CommandArgument (행 또는 항목의 ID)를 손쉽게 가져 와서 필요한 모든 데이터를 쿠키에 넣을 수 있습니다.

<asp:Button ID="btnAddArt" CommandName="AddCard" CommandArgument="[ArtID]" runat="server" Text="Add To Cart" /> 

이 그런 뒤에 코드는 다음과 같은 기능을 할 수 있습니다 : 그것은 의미가

Private Sub ProcessDetailsViewCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles DetailsView1.ItemCommand 

' Using Case statement makes it easy to add more custom commands later on. 
Select Case e.CommandName 

    Case "AddCard" 
     Dim CartArtID As New HttpCookie("CartArtID") 
     CartArtID.Value = Integer.Parse(e.CommandArgument.ToString) 
     CartArtID.Expires = Date.Today.AddDays(0.5) 
     Response.Cookies.Add(CartArtID) 
     Response.Redirect("Purchase.aspx") 

    End Select 
End Sub 
0

난 당신이 격자 자체 (DataKeyNames = "artid가")의 키를 옮기고 나타났습니다. 이벤트 처리기에서 이벤트에 액세스 할 수 있습니다. 이벤트 args는 그리드의 데이터 키에 대한 인덱싱을위한 현재 인덱스를 가져옵니다.

의미가 있습니까?

+0

, 나는 방법을 따르지 않는 공식적으로

더, 당신은이처럼 버튼이 찾고있어 그래도 그 일을하는거야? – Matt

0

DetailsView 컨트롤의 DataKeyNames 속성을 설정 했으므로 DetailsView1.DataKey (0)를 사용하여 표시된 항목의 ArtID에 액세스 할 수 있습니다. 또는 DetailsView1.SelectedValue를 사용하여 같은 것을 얻을 수 있습니다. click 이벤트를 처리 할 때는 ItemCommand 이벤트 처리기를 DetailsView에 추가해야합니다.