2008-12-02 72 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使用第一個和第二個單元格的值將該隱藏字段的值修改爲網格。

相關問題