У меня есть элемент управления GridView на моей странице, для которого я определил несколько полей BoundFields. Каждая строка GridView привязки данных имеет CommandField (Select), для которого я хочу отправить PostBack на новую страницу.
Конечно, я мог бы легко отправить NewSelectedIndex в QueryString, но я бы предпочел скрыть эту информацию от пользователя. Предложения?





Используйте столбец HyperLinkField в своем GridView:
<asp:HyperLinkField AccessibleHeaderText = "Edit" DataNavigateUrlFields = "ActivityId" DataNavigateUrlFormatString = "AcitivtyEdit.aspx?id = {0}" Text = "Edit Activity" />
Конечно, как вы сказали, эта опция показывает идентификатор в URL-адресе. Чтобы скрыть это (хотя любой может проверить ваш javascript и увидеть, что вы делаете), у вас есть два варианта: 1. Используйте код Javascript для установки скрытого поля с идентификатором, измените адрес обратной передачи (действия) формы и затем отправьте форму. Вы должны разрешить своему сайту asp.net разрешить обратную передачу с другой страницы. 2. Разрешите команде выполнить обратную передачу на ту же страницу, на которой размещен GridView, и в обработчике событий на стороне сервера на сервер. Перенести на вашу страницу (этот параметр представляет другие проблемы при последовательных обратных передачах ...)
Леппи прав. GridView не имеет свойства PostbackUrl. Однако вы можете делать то, что хотите, используя стандартный элемент управления, у которого есть свойство PostbackUrl.
<asp:TemplateField AccessibleHeaderText = "Edit">
<ItemTemplate>
<asp:Button runat = "server" ID = "btnEdit" PostBackUrl = "~/Default.aspx" OnClientClick='form1.ActivityId.value = this.Tag;' Tag='<%# Eval("ActivityId") %>' Text = "Edit"/>
</ItemTemplate>
</asp:TemplateField>
В этом примере кода я добавил TemplateColumn в GridView. Я использую динамически добавляемый атрибут Tag для кнопки, чтобы передать идентификатор, затем я использую код Javascript, чтобы поместить значение в скрытое поле, а затем кнопка просто отправляет обратно на страницу, указанную в свойстве PostbackUrl.
Спасибо Сергею Дамиану.
Я использую MasterPages, и скрытое поле UniqueID os может отличаться. Мне нужно разместить два значения. В случае Gridview_RowDataBound я помещаю этот код:
If e.Row.RowType = DataControlRowType.DataRow Then
e.Row.Cells(12).Text = ""
Dim img As New WebControls.ImageButton
img.PostBackUrl = "NecesidadesPostBack.aspx"
img.ImageUrl = "imagenes/edit.png"
img.OnClientClick = HDLB.UniqueID.ToString & ".value = '" & e.Row.Cells(0).Text & "'; " & HDPT.UniqueID.ToString & ".value = '" & e.Row.Cells(1).Text & "';"
img.AlternateText = "Edit"
e.Row.Cells(12).Controls.Add(img)
End If
У меня есть 2 скрытых поля (HDLB и HDPT). Событие OnClientClick изменяет значение этого скрытого поля на значение первой и второй ячейки в сетке.
Если вы выполните эти трюки, ASP.NET выдаст исключение. Попробуйте, прежде чем посоветовать.