2012-03-09 69 views
2

我有一個GridView,我已經編寫像下面調用JavaScript從GridView控件的TemplateField

<asp:TemplateField HeaderText="Item"> 
<ItemTemplate>            
    <asp:Button ID="btnItem" OnClientClick="javascript:SearchReqsult(<%#Eval("Id") %>);" 
CssClass="Save" runat="server" /> 
</ItemTemplate> 
</asp:TemplateField> 

我面對它說,我的按鈕控制的格式是否正確 我想這個問題有以下

運行時錯誤
OnClientClick="javascript:SearchReqsult(<%#Eval("Id") %>);" 

任何想法?

+0

嘗試使用此的OnClientClick = 「JavaScript的:SearchReqsult('<%#的eval(」 ID 「)%>');」 – Jigs 2012-03-09 09:51:17

+0

我用它...沒有運氣 – Roshe 2012-03-09 09:58:56

回答

2

嘗試使用以下代碼

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Button btn = (Button)e.Row.FindControl("btnItem"); 
     btn.Attributes.Add("OnClick","SearchReqsult(this.id);"); 
    } 
} 
+0

ID是與按鈕綁定的字段。 – Pankaj 2012-03-09 10:34:08

1

難道你不能這樣做是數據綁定。也許這樣的事情:

protected void Page_Load(object sender, EventArgs e) 
{ 
    yourGridView.RowDataBound += (s, ev) => 
      { 
       if (ev.Row.RowType == DataControlRowType.DataRow) 
       { 
        var btn= (Button) ev.Row.FindControl("btnCheque"); 
        btn.OnClientClick = "javascript:SearchReqsult(" + 
            DataBinder.Eval(ev.Row.DataItem, "Id") + ");"; 
       } 
      }; 
} 
+0

我使用__doPostBack在javascript:SearchReqsult中更新面板回發。但Request.Params。當我點擊按鈕時,Get(「__ EVENTARGUMENT」)總是爲空。該ID不會通過代碼 – Roshe 2012-03-09 10:10:37

0

把Labe l和綁定Id,並使其可見爲false。

在GridView的RowDataBound事件添加attrinute控制和按鈕指定的JavaScript的OnClientClick事件

1

嘗試封閉在單引號JavaScript函數調用:

OnClientClick='javascript:SearchReqsult(<%#Eval("Id") %>);'

也許問題是缺少/錯誤報價。

+0

這是不正確渲染onclick事件。請檢查您的頁面的查看來源。 – Pankaj 2012-03-09 11:13:29

1

用的String.Format類嘗試

<asp:Button ID="btnCheque" runat="server" 
OnClientClick=<%#String.Format("return SearchReqsult('{0}');", Eval("ID")) %> /> 
0

嘗試用單引號代替雙和的String.format()

<asp:Button ID="btnCheque" OnClientClick=<%# string.Format("javascript:SearchReqsult('{0}');return false;",Eval("id")) %> CssClass="Save" runat="server" /> 
+0

這不正確地呈現onclick事件。請檢查您網頁中的查看來源。 – Pankaj 2012-03-09 11:11:59

+0

我已經更新了代碼。這應該工作。請刪除retun false;如果你不需要。 – PraveenVenu 2012-03-09 11:25:45

+0

還有一個格式問題。在您的<%# – Pankaj 2012-03-09 11:35:07

1

附上你的'id'f在單引號中。

只需更換

btn.OnClientClick = "javascript:SearchReqsult(" + 
           DataBinder.Eval(ev.Row.DataItem, "Id") + ");"; 

btn.OnClientClick = "javascript:SearchReqsult(" + 
           DataBinder.Eval(ev.Row.DataItem, 'Id') + ");"; 

你的代碼來作爲

protected void Page_Load(object sender, EventArgs e) 
{ 
yourGridView.RowDataBound += (s, ev) => 
     { 
      if (ev.Row.RowType == DataControlRowType.DataRow) 
      { 
       var btn= (Button) ev.Row.FindControl("btnCheque"); 
       btn.OnClientClick = "javascript:SearchReqsult(" + 
           DataBinder.Eval(ev.Row.DataItem, 'Id') + ");"; 
      } 
     }; 
} 
+0

之前,{0}和單引號不需要單引號我們可以直接將您的上述代碼移至HTML端。 – Pankaj 2012-03-09 14:19:47

1

這是你需要做的

後面的代碼是什麼:

protected void GridView_RowCreated(object sender,GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (((DataRowView)e.Row.DataItem) !=null) 
      ((Button)e.Row.FindControl("btnCheque")).Attributes.Add("onclick","SearchReqsult(" + ((DataRowView)e.Row.DataItem)["productId"].ToString() + ")"); 

    } 
} 

HTML:

<asp:Button ID="btnCheque" CssClass="Save" runat="server" Text="My Button" /> 
+0

將「productId」列名更改爲您的列名「id」。這是一個工作代碼示例。 – Kaf 2012-03-09 11:59:00

+0

您的延遲加載在這種情況下是錯誤的。 'DataRowView'不能爲空。相反,你可以檢查'((DataRowView)e.Row.DataItem)[「Id」]爲空值。 – Pankaj 2012-03-09 14:16:25

+0

爲什麼你應該爲後面的代碼去做這樣一個小任務?只需要在按鈕點擊時調用客戶端功能。所以沒有必要浪費執行代碼的時間以及... – Pankaj 2012-03-09 14:18:11

0

呼叫從模板字段javascript函數

<asp:TemplateField HeaderText="Status" ItemStyle-HorizontalAlign="Center"> 
<ItemTemplate> 
    <asp:LinkButton ID="lnkDelete" OnClientClick=<%#String.Format("return dis_status('{0}');", Eval("Status")) %> runat="server" CommandArgument='<%# Eval("AgtId")%>' Text='<%# Eval("Status")%>' CommandName="cmdDelete" /> 
</ItemTemplate> 

相關問題