如何在客户端方法中调用服务器端方法

时间:2011-04-19 19:52:28

标签: jquery asp.net-mvc

我有一个html菜单,当它中的一个项目被点击时我想调用一个javascript处理程序,在其中我想调用服务器端方法,我该怎么做?

我会详细说说: 我有一个文件菜单,当用户点击“创建目录” - > java脚本处理程序用于将该目录(作为节点)添加到树视图。 在javascript处理程序的最后,我想调用一个将该目录添加到数据库的asp.net方法。

编辑2: 我试图使用JQuery.ajax()来访问客户端事件处理程序中的服务器端方法。这就是我的代码:

控制器

   [HttpPost]
        public ActionResult addDirectory(string directoryName)
        {
            Directory dir = new Directory();
          1-  dir.dateCreated = DateTime.Now;
          2-  dir.dateAccessed = DateTime.Now;
          3-  dir.dateModified = DateTime.Now;
          4- dir.ImgURL = "~/Images/Folder-Add-icon.png";
          5-  dir.DirectoryName = directoryName;
          6-  dirRepo.addDirectory(dir);
          7- dirRepo.Save();
            return new JsonResult { Data = dir };

    }

视图

 $.ajax({
            url: "Explorer/addDirectory", 
            type: "POST",
            dataType: "json",
            data: {param1: name},

          complete: function() {
              alert("finished");
          },

          success: function(data) {
          alert("added");
         },

          error: function() {
          alert("error");
          },
        });

问题是,如果我在控制器方法中添加1-7行,则会始终调用“error”方法。如果我将它们注释掉,则会调用success方法,为什么?

3 个答案:

答案 0 :(得分:2)

控制器代码

[HttpPost]
public ActionResult SomeMethod(int param1, string param2) {
    return Json(someobject);
}

使用jQuery的javascript

 $.ajax({
    url: "controller/somemethod", // or <%=Url helper method can't remember
    type: "POST",
    dataType: "json",
    data: {param1: 10, param2: "x"},

  complete: function() {
      //called when complete
  },

  success: function(data) {
      // json returned from server
      //called when successful
 },

  error: function() {
      //called when there is an error
  },
});

我建议在网上搜索mvc教程

答案 1 :(得分:0)

要在客户端事件上调用服务器端方法,您需要执行以下操作:

1-创建服务器端方法:

void DoSomething(...) { ... }

2-实现System.Web.UI.IPostBackEventHandler接口的RaisePostBackEvent,它接受一个字符串参数(你可以用某种方式使用..):

public void RaisePostBackEvent(string eventArgument) {
  if (eventArgument == "value") DoSomething(...);
}

3-编写脚本以触发回发:

function TriggerPostBack(control, arg){ __doPostBack(control, arg); } 

4-需要时调用PostBack触发功能:

<asp:Button.... onclick="TriggerPostBack('button', 'btnOk')" .. /> 

答案 2 :(得分:0)

创建网络方法

[WebMethod]
static string FooBar(string arg) {

}

使用ajax调用WebMethod。 $.ajaxXMLHttpRequest