从 JavaScript 函数调用 C# 方法背后的代码时出错

error in calling code behind C# method from javascript function

本文关键字:代码 出错 背后 方法 JavaScript 函数调用      更新时间:2023-09-26

我有以下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"函数

几件事。

首先,您需要使用 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
}

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

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

如果你想让 JavaScript 执行服务器端代码,你可以使用几种技术。除了 mattyTommo 描述的 WebMethods 之外,您还可以在输入框中放置一个值,然后调用服务器端按钮的按钮单击,并让服务器端代码读取输入框的内容。