我有一个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方法,为什么?
答案 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。 $.ajax
或XMLHttpRequest