使用ButtonField或HyperLinkField在ASP.NET中编写cookie
-
05-07-2019 - |
题
我目前在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>
使用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不允许我为它提供ID,我无法弄清楚如何将其应用于ButtonField。
我需要添加到cookie的ID是第一个BoundField中的ArtID。
非常感谢任何关于如何做到这一点的想法/建议!
或者,如果我可以使用HyperLinkField或使用常规按钮,那也一样好,但是我在使用常规按钮访问DetailsView中的ID时遇到了麻烦。
由于
解决方案
使用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
其他提示
我注意到你把密钥放在网格本身(DataKeyNames =&quot; ArtID&quot;)。您可以在事件处理程序中访问它 - 事件args将为您提供索引到网格上的数据键的当前索引。
有意义吗?
由于您设置了DetailsView控件的DataKeyNames属性,因此可以使用DetailsView1.DataKey(0)访问显示项的ArtID。或者,您可以使用DetailsView1.SelectedValue来获得相同的内容。 至于处理click事件,您必须将一个ItemCommand事件处理程序添加到DetailsView。