0

我有以下java脚本函数

<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”函数

4

2 回答 2

2

一些事情。

首先,您需要使用WebMethod属性来装饰您的方法并使其成为static。尝试这个:

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

现在,确保你有一个ScriptManager

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

然后在 JavaScript 中,您可以通过以下方式调用它:

PageMethods.setDone(taskID, onSuccessMethod,onFailMethod);

虽然也有成功和失败的方法(在上面传递):

function onSuccessMethod(success) {
    //query success
}

function onFailMethod() {
    //check failure
}
于 2013-10-02T10:51:48.357 回答
1

所有的服务器内联代码,例如<%=setDone(123)%>在页面生成期间执行的,它在 JavaScript 中的位置仅仅是因为你把它放在那里。

您可以使用内联代码以这种方式将服务器端数据传递JavaScript。

如果您希望 JavaScript 执行服务器端代码,您可以使用多种技术。与 mattyTommo 描述的 WebMethods 一样,您可以在输入框中输入一个值,然后为服务器端按钮调用一个按钮单击,并让服务器端代码读取输入框的内容。

于 2013-10-02T10:52:49.557 回答