我在我的页面上有一个GridView控件,我已经定义了一些BoundFields。数据绑定GridView的每一行都有一个CommandField(Select),为此我想将PostBack发送到一个新页面。PostbackUrl可以设置为GridView CommandField吗?
当然,我可以很容易地在QueryString中发送NewSelectedIndex,但我宁愿让这些信息隐藏在用户面前。建议?
我在我的页面上有一个GridView控件,我已经定义了一些BoundFields。数据绑定GridView的每一行都有一个CommandField(Select),为此我想将PostBack发送到一个新页面。PostbackUrl可以设置为GridView CommandField吗?
当然,我可以很容易地在QueryString中发送NewSelectedIndex,但我宁愿让这些信息隐藏在用户面前。建议?
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>
在这个示例代码中,我添加了一个TemplateColumn到GridView。我使用动态添加的标签属性为按钮传递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的隐藏字段,改变Form回发(action)地址,然后提交形成。您必须允许您的asp.net站点允许从其他页面回发 2.允许命令回发到承载GridView的同一页面,并在服务器端事件处理程序中回传到您的页面的Server.Transfer(此选项提出连续回发otehr问题...)
如果你这样做,ASP.NET会抛出一个异常。在您建议之前尝试。 – leppie 2008-12-02 13:16:26
谢谢Sergiu达米安。
我使用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
我有两个隐藏字段(HDLB和HDPT)。事件OnClientClick使用第一个和第二个单元格的值将该隐藏字段的值修改为网格。
仅在IE中测试! – 2008-12-04 21:14:49