2010-01-19 90 views
2

我有一個Asp.net GridView(使用數據綁定填充)。 我的一列是一個ButtonField(顯然帶有他自己的CommandName)。在RowDataBound中設置OnClientClick後事件不會觸發

GridView_RowCommand作品完美,但如果我添加一個GridView_RowDataBound(其中我只需添加一個JavaScript確認)GridView_RowCommand事件不會在回發解僱。

可能是什麼問題/解決方案?

添加代碼,以便更好地理解:

.aspx的代碼:

<asp:GridView ID="GridView1" runat="server" 
    OnRowCommand="GridView1_RowCommand" 
    onrowdatabound="GridView1_RowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="MyField1" HeaderText="MyField1" /> 
     <asp:BoundField DataField="MyField2" HeaderText="MyField2" /> 
     <asp:ButtonField Text="MyAction" ButtonType="Image" ImageUrl="myaction.gif" CommandName="myaction" /> 
    </Columns> 
</asp:GridView> 

C#代碼:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     (e.Row.Cells[e.Row.Cells.Count - 1].Controls[0] as ImageButton).OnClientClick = "javascript:return confirm (\"Do action?\");"; 
    } 
} 

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "myaction") 
    { 
     DoMyAction(); 
    } 
} 

編輯:

我忘了告訴我的GridView的是內部的ajax TabContainer(AjaxControlToolkit)

回答

5

這是針對圖像按鈕通常發出:

<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" /> 

當你在你設置的OnClientClick代碼隱藏,它會在前面加上你的代碼,但仍增加了__doPostBack函數調用,導致下面的HTML :

<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:return confirm('Do action?');javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" /> 

的onclick事件處理程序將返回它得到一個機會做正確的回發(它只是提交表單)前。

這樣做:

(e.Row.Cells[e.Row.Cells.Count - 1].Controls[0] as ImageButton).OnClientClick = "if (!confirm('Do action?')) { return false; }"; 

應該允許客戶端點擊事件運行__doPostBack功能,提高RowCommand事件服務器端,當用戶點擊OK預期。 (作爲一個側面說明,這是ASP.NET WebForms的一個缺點的很好的例子 - 有很多html被生成,你只是無法控制ASP.NET MVC FTW!)

+0

它的工作!謝謝! 我仍然想知道爲什麼「javascript:return confirm(\」Do action?\「);」不同於「if(!confirm('Do action?')){return false;}」 和btw你是對的:ASP.NET MVC FTW! – p4bl0 2010-01-20 10:35:36

+1

我試着回答自己..如果點擊'否',但工作版本返回false,但如果點擊「是」,則返回true。 – p4bl0 2010-01-20 10:43:10

+1

你已經得到它:)很高興我能幫上忙。 – 2010-01-20 12:01:35

0

乍一看這似乎很好。你有沒有嘗試在TabContainer之外運行你的代碼?

它可能會讓你朝正確的方向發展。