2013-10-02 68 views
0

我有以下的Java腳本函數錯誤從javascript函數調用後面的C#方法的代碼

<script type="text/javascript"> 
      function taskDone(taskID) { 

       alert(taskID); 

       var btn = document.getElementById('btn-taskDone-' + taskID); 
       var icon = document.getElementById('task-icon-' + taskID); 

       btn.style.color = '#8F9199'; 
       btn.onclick = ""; 
       btn.style.cursor = 'default'; 
       icon.src = "./../Images/Icons/doneTask.png";     

       '<%=setDone(123)%>' 

      } 

</script> 

背後方法

public Boolean setDone(int taskID) 
    { 
     BO.taskDao myTask = new BO.taskDao(); 
     Boolean success = myTask.setDone(1, taskID); 
     return success; 
    } 

下面的代碼,我想從javascript函數調用setDone方法並傳遞taskID而不是123, 但我現在不怎麼做。我不知道爲什麼服務器自動運行這一行腳本'<%= setDone(123)%>'當頁面加載並且沒有調用taskDone「JavaScript」函數時

+0

你更喜歡使用ajax或做回發? –

回答

2

幾件事。

首先,您需要使用WebMethod屬性對您的方法進行decorare,並使其成爲static。試試這個:

[WebMethod] 
public static Boolean setDone(int taskID) 
{ 
    BO.taskDao myTask = new BO.taskDao(); 
    Boolean success = myTask.setDone(1, taskID); 
    return success; 
} 

現在,確保你有一個ScriptManager

PageMethods.setDone(taskID, onSuccessMethod,onFailMethod); 

雖然也有成功和失敗的方法:

<asp:ScriptManager ID="ScriptMgr" runat="server" EnablePageMethods="true"> </asp:ScriptManager> 

然後在JavaScript中,你做叫它(在上面通過):

function onSuccessMethod(success) { 
    //query success 
} 

function onFailMethod() { 
    //check failure 
} 
1

所有服務器內嵌代碼(如<%=setDone(123)%>)都是在生成頁面期間執行的,並且它在JavaScript中的位置僅僅是因爲您將它放置在那裏。

您可以使用內嵌代碼到服務器端數據傳遞給的JavaScript以這種方式。

如果您希望JavaScript執行服務器端代碼,您可以使用多種技術。除了mattyTommo描述的WebMethods之外,您還可以在輸入框中添加一個值,然後調用服務器端按鈕的按鈕點擊並讓服務器端代碼讀取輸入框的內容。

相關問題