我的页面上有一个GridView控件,我为其定义了许多BoundFields。数据绑定GridView的每一行都有一个CommandField(Select),我想将PostBack发送到新的页面。
当然我可以轻松地在QueryString中发送NewSelectedIndex,但我宁愿将这些信息隐藏在用户之外。建议?
答案 0 :(得分:1)
Leppie是对的。 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>
在此示例代码中,我向GridView添加了一个TemplateColumn。我使用动态添加的Tag属性为按钮传递Id,然后我使用Javascript代码将值放在隐藏字段中,然后按钮简单地回发到PostbackUrl属性中指定的页面。
答案 1 :(得分:0)
在GridView中使用HyperLinkField列:
<asp:HyperLinkField AccessibleHeaderText="Edit" DataNavigateUrlFields="ActivityId" DataNavigateUrlFormatString="AcitivtyEdit.aspx?id={0}" Text="Edit Activity" />
当然,正如您所说,此选项会在网址中显示ID。 要隐藏它(虽然任何人都可以查看你的javascript并看看你做了什么),你有两个选择: 1.使用Javascript代码设置带有id的隐藏字段,更改Form回发(操作)地址,然后提交表单。您必须允许您的asp.net站点允许从其他页面回发 2.允许Command回发到托管GridView的同一页面,并在服务器端事件处理程序中回发到您的页面(此选项显示连续回发的问题...)
答案 2 :(得分:0)
感谢Sergiu Damian。
我使用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使用第一个和第二个单元格的值修改此隐藏字段的值到网格上。