我已经尝试了几个小时才能使其正常工作,我真的希望你们中的一个比我更了解(很多)。当客户端在文本框中键入内容时,我想调用MVC C#控制器方法称为updateOrder()。理想情况下,我想使用FormCollection访问表单元素(该表单称为“ createOrder”)。
在控制器中,我有:
C#
[WebMethod] public static void updateOrder(){ string s = "asdf"; }
上面的字符串声明是断点的。在视图中,我有一个基本上可以复制并粘贴在stackoverflow上找到的方法:
的JavaScript
function updateOrderJS() { var $form = $('form[id="createOrder"]'); $.ajax({type : "POST", url : $form.attr('action'), data : $form.serialize(), error : function(xhr, status, error) {}, success : function(response) { updateOrder(); } }); return false; }
该事件很简单:
updateOrderJS();
将触发updateOrderJS()方法(使用警报检查),但不会断点。
在Asp.Net MVC中,您不需要使用来修饰您的方法WebMethod。您只需创建一个Action(这是一个方法)并从中返回结果即可。样品:
WebMethod
public class CustomerController : Controller { public ActionResult Index() { return View(); } [HttpPost] public ActionResult UpdateOrder() { // some code return Json(new { success = true, message = "Order updated successfully" }, JsonRequestBehavior.AllowGet); } }
在您的中View,您可以尝试这样的javascript(使用$ .ajax jquery方法-参见注释):
View
$.ajax({ url: '@Url.Action("UpdateOrder")', // to get the right path to controller from TableRoutes of Asp.Net MVC dataType: "json", //to work with json format type: "POST", //to do a post request contentType: 'application/json; charset=utf-8', //define a contentType of your request cache: false, //avoid caching results data: {}, // here you can pass arguments to your request if you need success: function (data) { // data is your result from controller if (data.success) { alert(data.message); } }, error: function (xhr) { alert('error'); } });