【问题标题】:Using ButtonField or HyperLinkField to write a cookie in ASP.NET在 ASP.NET 中使用 ButtonField 或 HyperLinkField 编写 cookie
【发布时间】:2010-09-15 12:26:43
【问题描述】:

我目前在 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,因为 ButtonField 不允许我给它一个 ID。

我需要添加到 cookie 中的 ID 是第一个 BoundField 中的 ArtID。

非常感谢任何关于我将如何去做的想法/建议!

或者,如果我可以使用 HyperLinkField 或常规按钮执行此操作,那将同样好,但我无法使用常规按钮访问 DetailsView 中的 ID。

谢谢

【问题讨论】:

    标签: asp.net vb.net cookies detailsview buttonfield


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      我注意到您将密钥放入网格本身 (DataKeyNames="ArtID")。您可以在事件处理程序中访问它 - 事件参数将为您获取当前索引以索引到网格上的数据键。

      有意义吗?

      【讨论】:

      • 有道理,但我不知道我会怎么做?
      【解决方案3】:

      由于您设置了 DetailsView 控件的 DataKeyNames 属性,因此您可以使用 DetailsView1.DataKey(0) 访问显示项目的 ArtID。或者,您可以使用 DetailsView1.SelectedValue 来获得相同的结果。 至于处理点击事件,您必须将 ItemCommand 事件处理程序添加到 DetailsView。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-19
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-26
        相关资源
        最近更新 更多