1

現在、ASP.NETにDetailsViewがあり、QueryStringを介して渡されたIDに基づいてデータベースからデータを取得しています。私が今やろうとしているのは、ユーザーがButtonFieldまたはHyperLinkFieldのいずれかをクリックしたときに作成される新しいCookieで同じIDを使用することです。

私が.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>

次のようなレギュラー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ではIDを指定できないため、これをButtonFieldに適用する方法がわかりません。

Cookieに追加する必要のあるIDは、最初のBoundFieldのArtIDです。

私がこれをどのように行うかについてのアイデア/アドバイスは大歓迎です!

あるいは、HyperLinkFieldまたは通常のボタンを使用してそれを行うことができれば、それは同じように良いでしょうが、通常のボタンを使用してDetailsView内のIDにアクセスするのに問題があります。

ありがとう

4

3 に答える 3

1

Button クラスの CommandName および CommandArgument パラメータを使用します。CommandName を指定すると、ItemCommand イベントが公開されます。そこから、CommandName を確認し、CommandArgument (行または項目の ID) を簡単に取得して、必要なデータをその方法で Cookie にプッシュできます。

より正式には、次のようなボタンを探しています。

<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
于 2008-10-06T16:13:26.287 に答える
0

DetailsViewコントロールのDataKeyNamesプロパティを設定しているため、DetailsView1.DataKey(0)を使用して、表示されているアイテムのArtIDにアクセスできます。または、DetailsView1.SelectedValueを使用して同じものを取得することもできます。クリックイベントの処理に関しては、ItemCommandイベントハンドラーをDetailsViewに追加する必要があります。

于 2008-10-06T15:07:26.590 に答える
0

グリッド自体にキーを配置していることに気付きました (DataKeyNames="ArtID")。イベント ハンドラーでこれにアクセスできます。イベント引数は、グリッド上のデータキーにインデックスを付けるための現在のインデックスを取得します。

わかる?

于 2008-10-06T13:59:21.143 に答える