jQuery在Ajax中调用ASP.NET MVC C#中的Action Method

我已经尝试了几个小时才能使这个工作,我真的希望你们中的一个人知道(很多)这个比我更多。当客户端在文本框中键入时,我想调用MVC C#控制器名为updateOrder()的方法。 理想情况下,我想使用FormCollection访问表单元素(表单称为“createOrder”)。

在控制器中,我有:

C#

[WebMethod] public static void updateOrder(){ string s = "asdf"; } 

上面的字符串声明是breakpointed。 在视图中,我有一个基本上复制和粘贴的方法,我在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; } 

事件很简单:

JavaScript的

 updateOrderJS(); 

触发updateOrderJS()方法(使用警报检查),但断点不会触发。

在Asp.Net MVC中,您不需要使用WebMethod来装饰您的方法。 您只需创建一个Action(这是一个方法)并从中返回一个结果。 样品:

 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方法 – 参见注释):

 $.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'); } }); 

在MVC中,你不需要[WebMethod]东西 – 你可以有一个常规的控制器动作返回一个ActionMethod (如果你不需要返回值,则返回null)。 具有静态方法的WebMethod属性适用于WebForms,而不适用于MVC。

 public ActionMethod updateOrder(MyModel someModel) { // Do something return null; } 

您在javascript中的url将是该操作的url,您可以使用@Url.Action("updateOrder", "Orders")在Razor中获取该url,其中“订单”是您的控制器的名称。

  1. 确保“url”的格式为page.aspx / updateOrder

  2. 指定datatype: json

  3. 确保正在调用updateOrderJS()

  4. 确保contentType: "application/json; charset=utf-8"包含在内。

注意: [WebMethod]用于调用webforms方法,而不是MVC。

看起来您将MVC路由的URL放在

标记的action属性中。 我看不出那个属性是什么样的,因为你没有发布你的html,但从我看到的那个属性的值可能是错误的。

大多数情况下,特定MVC操作的URL是http://ServerDomain/Path(IfAny)/ControllerName/ActionName 。 例如,如果你有一个这样的控制器和动作……

 public class StackController { [HttpPost] public ActionResult Overflow() { return View(); } } 

…并且您的ASP.NET应用程序已部署到www.example.com,

标记的action属性中的URL将为http://www.example.com/Stack/Overflow

当然,ASP.NET MVC中的其他设置可能会更改这些URL,例如global.asax的RegisterRoutes方法中的路由设置,或者如果您的控制器分为区域。 如果您的

的URL看起来正确,请在您的ASP.NET应用程序中发布html以及任何相关的控制器路由代码。

如果您的表单位于Razor视图(cshtml文件)中,您可以使用

来生成正确的表单URL。