2015-03-03 35 views
0

我使用jQuery插件tablednd如何在asp.net中使用javascript調用函數?

$(document).ready(function() { 
    $('#mygridview').tableDnD(); 
}) 

,使我在GridView控件拖動我行。 當我拖動一行時,我想調用asp.net中的函數來保存行的位置。但是我無法在gridview上找到適當的事件,只有在點擊行時纔會發生反應。

tableDnd中有一個onDrop方法。

$(document).ready(function() { 
    $('#mygridview').tableDnD({ 
     onDrop: function(table, row) { 
    }); 
}) 

但我怎麼能從那裏調用一個asp.net方法?我讀過一些關於ajax的帖子,但我不明白。

而且我也讀了關於使用PageMethods但它沒有調用我的功能。

問題是我該如何編寫在我的數據庫的表上執行更新的東西?

更新:

我解決它使用IPostBackEventHandler方法。

我不得不使用IPostBackEventHandler 擴展我的用戶控件和我的頁面,然後在用戶控件和頁面上都添加了public void RaisePostBackEvent(string eventArgument)函數。最後:

onDrop: function (table, row) { 
       __doPostBack('<%= this.UniqueID %>', 'Select'); 
      } 

如果有人用onDrop了問題,解決的辦法是,你必須給ID,以這樣的每一行:

var i = 0; 
    $("#<%= gridviewID.ClientID %>").find('tr').each(function() { 
     $(this).attr('id', i++); 
    }); 

的tablednd的啓動上面。

謝謝!

+1

的可能重複[調用ASP.NET功能從JavaScript?](http://stackoverflow.com/questions/3713/call-asp-net-function-from-javascript) – 2015-03-03 09:31:55

+0

我得到的錯誤:向我的Page類添加IPostBackEventHandler {}時,所有類中的期望類,委託,枚舉,接口或結構。你知道爲什麼? – 2015-03-03 09:43:09

+0

問題在於這種方法。你*不應該使用gridview和ajax更新。如果你想使用'tableDND',你應該用ajax調用來填充表格。因爲gridview的數據綁定是服務器端事件,而tableDnD中的更新是客戶端事件。 – naveen 2015-03-03 10:11:49

回答

2

一般有兩種方法,一種使用AJAX,另一種使用回傳。

的AJAX方法:

  1. 添加的ScriptManager到網頁,就像這樣:

    <asp:ScriptManager runat="server" 
         ID="ScriptManager1" 
         EnablePageMethods="true" 
         EnablePartialRendering="true" 
    /> 
    
  2. 使服務器端的方法被稱爲公共靜態。另外隨着System.Web.Services.WebMethod屬性標記它,就像這樣:從客戶端

    [WebMethod] 
    public static string DoServerStuff(string parameter) 
    { 
        return "Parameter passed: " + parameter; 
    } 
    
  3. 稱呼它,通過PageMethods類,像這樣:

    function doClientStuff() { 
        var result = PageMethods.DoServerStuff('test parameter'); 
        alert(result); 
    } 
    
  4. 對於做同樣的事情使用jQuery檢查this了。


的回傳方式:

  1. 使頁面(包含要調用的方法)實現IPostBackEventHandler接口。
  2. 調用__doPostBack方法在客戶端,就像這樣:

    function doClientStuff() { 
        var result = __doPostBack('<%= this.UniqueID %>', 'Select'); 
    } 
    
  3. 實現頁面IPostBackEventHandler.RaisePostBackEvent方法中的服務器端邏輯。

  4. 更多關於從客戶端提高回傳here

+0

使用AJAX方法時:出現錯誤:「PageMethods未定義」。在使用回發方式時:向我的Page類添加IPostBackEventHandler {}時,我在所有類中收到錯誤「Expected class,delegate,enum,interface或struct」。 – 2015-03-03 11:01:11

+0

請確保:1.您爲ScriptManager指定了一個Id 2.其EnablePageMethods設置爲true,3.您的服務器方法在PAGE上,而不是用戶控件 – codeRecap 2015-03-03 11:11:00

+0

好吧,那麼它不會工作,服務器方法是在用戶控制中。 – 2015-03-03 11:16:04

相關問題