可以为GridView CommandField设置PostbackUrl吗?

时间:2008-12-02 09:45:26

标签: c# asp.net gridview postback

我的页面上有一个GridView控件,我为其定义了许多BoundFields。数据绑定GridView的每一行都有一个CommandField(Select),我想将PostBack发送到新的页面。

当然我可以轻松地在QueryString中发送NewSelectedIndex,但我宁愿将这些信息隐藏在用户之外。建议?

3 个答案:

答案 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使用第一个和第二个单元格的值修改此隐藏字段的值到网格上。