Использование ButtonField или HyperLinkField для записи файла cookie в ASP.NET - PullRequest
1 голос
/ 06 октября 2008

В настоящее время у меня есть DetailsView в ASP.NET, который получает данные из базы данных на основе идентификатора, переданного через QueryString. Сейчас я пытаюсь использовать этот же идентификатор в новом файле cookie, который создается, когда пользователь нажимает кнопку ButtonField или HyperLinkField.

Что у меня есть в .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 не позволяет мне присвоить ему идентификатор.

Идентификатор, который мне нужно добавить в файл cookie, - это ArtID в первом BoundField.

Любая идея / совет о том, как мне поступить, очень ценится!

В качестве альтернативы, если бы я мог сделать это с HyperLinkField или с обычной кнопкой, это было бы так же хорошо, но у меня возникают проблемы с использованием обычной кнопки для доступа к идентификатору в DetailsView.

Спасибо

Ответы [ 3 ]

1 голос
/ 06 октября 2008

Используйте параметры CommandName и CommandArgument класса Button. Указание CommandName представит событие ItemCommand. Оттуда вы можете проверить имя CommandName, легко получить CommandArgument (идентификатор вашей строки или элемента), а затем вставить любые данные, которые вам нужны, в ваш файл 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
0 голосов
/ 06 октября 2008

Поскольку вы установили свойство DataKeyNames элемента управления DetailsView, вы можете получить доступ к ArtID отображаемого элемента, используя DetailsView1.DataKey (0). В качестве альтернативы вы можете использовать DetailsView1.SelectedValue, чтобы получить то же самое. Что касается обработки события click, вам нужно добавить обработчик события ItemCommand в DetailsView.

0 голосов
/ 06 октября 2008

Я заметил, что вы помещаете ключ в саму сетку (DataKeyNames = "ArtID"). У вас есть доступ к этому в вашем обработчике событий - аргументы события получат текущий индекс для индексации по ключам данных в сетке.

Имеет смысл?

...