2009-09-05 79 views
6

我有一個ASP.Net頁面,它向用戶顯示一個選項列表。當他們從列表中選擇時,它會回發並查詢sql服務器。結果顯示在更新面板中選項下方的列表視圖中。下面是ItemTemplate中的一個片段:爲什麼我的CommandArgument爲空?

<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" /> 

的DataItemIndex沒有出現,所以我commandargument是空的。但是,對象發件人是顯示該項目的按鈕。

爲什麼索引項沒有出現在CommandArgument中?

難道是回帖嗎?如果是這樣,那麼爲什麼會是回發?有沒有辦法解決它?

編輯: 對不起,我試圖解決它之前,我張貼錯誤的代碼,但它仍然沒有出現。

分辨率: 我發現另一個解決方法是OnCommand的發件人是鏈接按鈕,它具有CommandArgument。我會將這個問題記錄成多個回傳和javascript的問題。

+0

幾乎肯定是回發... – 2009-09-05 00:46:12

回答

7

不能在具有runat="server"屬性的標記的屬性內使用<%= %>語法。我很驚訝代碼甚至會運行。 :)

UPDATE:

您可能需要使用中繼器上ItemDataBound事件,發現的LinkBut​​ton並設置CommandArgument屬性。

不是很優雅,但這裏是一個VB.NET示例。

Private Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound 
    Select Case e.Item.ItemType 
     Case ListItemType.Item, ListItemType.AlternatingItem 
     Dim b As LinkButton = e.Item.FindControl("btn") 
     b.CommandArgument = e.Item.ItemIndex 
    End Select 
    End Sub 
+0

我將它改爲#,但它仍然不會顯示在CommandArgument中。它不能解決原來的問題。 – kevindaub 2009-09-05 01:14:10

+0

我發現了另一個解決方法,但是您的解決方案也應該可以工作。 – kevindaub 2009-09-05 02:05:38

0

你不設置它

你可能想

<%# Container.DataItemIndex %> 

<%= Container.DataItemIndex %> 

:)

0

嘗試

<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" /> 

您錯過了「#」號。

+0

對不起,我發佈了不好的代碼。它仍然沒有出現。 – kevindaub 2009-09-05 00:53:10

0

這個網站真的幫助我解決這個問題:http://forums.asp.net/t/1671316.aspx

我遇到的問題是,我是被傳遞空參數在commandargument當我在按鈕上點擊一次。正如上面的帖子所解釋的那樣,這是因爲commandargument只在數據綁定事件中設置。因此,要解決這個問題,請在page_load子文件中包含一個數據綁定事件。 (VB)

Private Sub BindSelectButtons()  

    'Purpose: bind the data to the select buttons for commandargument to be used 
    Dim i As Integer 
    For i = 0 To gridview1.Rows.Count - 1 
     gridview1.Rows(i).Cells(8).FindControl("btnID").DataBind() 
    Next 
End Sub 

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 

    'Rebind select buttons so that the commandargument refreshes 
    BindSelectButtons() 
End Sub 
0

確保視圖狀態已啓用 e.Row。EnableViewState = true;