2008-12-02 73 views
0

我在我的页面上有一个GridView控件,我已经定义了一些BoundFields。数据绑定GridView的每一行都有一个CommandField(Select),为此我想将PostBack发送到一个新页面。PostbackUrl可以设置为GridView CommandField吗?

当然,我可以很容易地在QueryString中发送NewSelectedIndex,但我宁愿让这些信息隐藏在用户面前。建议?

回答

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> 

在这个示例代码中,我添加了一个TemplateColumn到GridView。我使用动态添加的标签属性为按钮传递Id,然后我使用Javascript代码将值放在隐藏字段中,然后该按钮仅回发到PostbackUrl属性中指定的页面。

+0

仅在IE中测试! – 2008-12-04 21:14:49

0

在你的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问题...)

+0

如果你这样做,ASP.NET会抛出一个异常。在您建议之前尝试。 – leppie 2008-12-02 13:16:26

0

谢谢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使用第一个和第二个单元格的值将该隐藏字段的值修改为网格。

相关问题