我的页面上有一个 GridView 控件,我为其定义了许多 BoundFields。数据绑定的 GridView 的每一行都有一个 CommandField (Select),我想为此将 PostBack 发送到新页面。
当然,我可以轻松地在 QueryString 中发送 NewSelectedIndex,但我宁愿对用户隐藏该信息。建议?
莱皮是对的。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 属性中指定的页面。
在 GridView 中使用 HyperLinkField 列:
<asp:HyperLinkField AccessibleHeaderText="Edit" DataNavigateUrlFields="ActivityId" DataNavigateUrlFormatString="AcitivtyEdit.aspx?id={0}" Text="Edit Activity" />
当然,正如您所说,此选项在 url 中显示 id。要隐藏它(尽管任何人都可以查看您的 javascript 并查看您的操作),您有两种选择: 1. 使用 Javascript 代码设置一个带有 id 的隐藏字段,更改表单回发(操作)地址,然后提交表单。您必须允许您的 asp.net 站点允许从不同页面回发 2. 允许命令回发到托管 GridView 的同一页面,并在服务器端事件处理程序中回发到 Server.Transfer 到您的页面(此选项提供关于顺序回发的其他问题...)
谢谢塞尔吉乌·达米安。
我使用 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 事件将这个隐藏字段的值修改为网格上第一个和第二个单元格的值。