2011-11-29 103 views
0

我继承了一个使用ASP.NET MVC 3的代码库。我正在学习它。该项目似乎公开了格式为“/ svcs/orders /”的API。有一种方法已经写入位于MyProject.Areas.svcs.Controllers.OrdersController中的文件中。该控制器如下所示:在ASP.NET MVC 3中执行PUT方法

public class OrdersController : Controller 
{ 
    [AcceptVerbs(HttpVerbs.Put)] 
    public ActionResult AddOrder(OrderModel data) 
    { 
    // Do Stuff... 

    var result = GetResult(); 
    return Json(result, JsonRequestBehavior.AllowGet); 
    } 
} 

我想弄清楚如何通过JQuery调用此方法。我知道我可以通过“/ svcs/orders /”地址来引用服务。但我不确定如何将数据“PUT”到服务。如何填充AddOrder方法预期的OrderModel参数?它对我来说太奇怪了。目前,我正在尝试以下操作:

var productID = $("#hidProductID").val(); 
var quantity = $("#txtQuantity").val(); 

$.ajax({ 
    url: '/svcs/orders', 
    type: 'PUT', 
    contentType: 'application/json; charset=utf-8', 
    success: function (result) { 
    alert(result); 
    }, 
    error: function() { 
    alert("There was an error."); 
    } 
}); 

非常感谢您提供的任何帮助!

回答

0

您可以在JSON对象的形式下通过OrderModel在ajax选项的data属性中。

var productID = $("#hidProductID").val(); 
var quantity = $("#txtQuantity").val(); 

$.ajax({ 
    url: '/svcs/orders', 
    type: 'PUT', 
    data: { 
    productID: productID, 
    quantity: quantity 
    }, 
    contentType: 'application/json; charset=utf-8', 
    success: function (result) { 
    alert(result); 
    }, 
    error: function() { 
    alert("There was an error."); 
    } 
}); 
+0

当我这样做,我收到500错误。为什么会发生?我拥有它,所以我的方法除了返回“OK”以外没有其他任何操作。 – Villager

+0

在你的控制器方法AddOrder中设置断点,看看它是否被命中,以及它是否使用调试器检查OrderModel数据项。如果它没有被击中,你在路由方面有问题。如果您希望我们帮助您使用JS在客户端构建适当的对象,则还应该发布'OrderModel'的数据类型。 – mattypiper