将数据从JavaScript发送到Controller

时间:2014-03-11 21:19:47

标签: jquery ajax asp.net-mvc

我无法在控制器中看到JavaScript中的数据,但我看到了Request Header中的值。我不知道为什么这不起作用....

的JavaScript

$('#Save').click(function (e) {
    if (document.forms[0].checkValidity()) {

    e.preventDefault();

    $.ajax({
      url: "/Home/SaveDetails",
      dataType: "json",
      data: JSON.stringify({ data: "test" }),
      type: "POST",
      contentType: "application/json;charset=utf-8",
      success: function (result) {
      if (result > 0) {
        alert("Worked!);
      } else {
        alert("There was an issue.");
      }
    },
    complete: function () {
      alert("Completed!");
    },
    error: function (jqXHR, textStatus, errorThrown) {
      // Handle error.
      alert(errorThrown);
    }
  });
 }
 else {
   alert("Form is not valid");
 }
});

控制器

[HttpPost]
public ActionResult SaveDetails(string value)
{
    return Json(true, JsonRequestBehavior.AllowGet);  
}

如果我修改上面ajax请求的url参数以包含类似>的内容。 url:" / Home / SaveDetails?username =" +' sampleUser'我可以在控制器中看到这些数据,但无论采用何种方法,我都不会看到使用数据参数从ajax请求发送的任何内容。

3 个答案:

答案 0 :(得分:3)

您需要将发布的名称与方法参数相匹配。

尝试在ajax调用中进行此更改

数据:JSON.stringify({:"测试"}),

答案 1 :(得分:3)

您要发送控制器的数据名称必须与您要匹配的参数名称相匹配。在您的情况下,您命名数据“数据”,参数称为“值”。这应该解决它:

data: JSON.stringify({ value: "test" })

另外,您不需要使用JSON.stringify来发送数据。以下行也可以正常工作:

data: { value: "test" },

此外,如果您的数据与某个类匹配,mvc将尽力匹配发送到类属性名称的数据:

public class MyClass
{
    public int Quantity { get; set; }
    public string Title { get; set; }
}

public ActionResult DoStuff(MyClass myClass)
{
    //do stuff
}

然后在你的ajax中你可以:

data: { quantity: 32, title: 'Stuff & Things' },

并且控制器会将ajax请求中的数据与模型匹配。

答案 2 :(得分:1)

如果我没弄错的话,您正在检索请求参数(用户名)中的数据,而不是您在响应正文中发送的数据({data:'test'})。

我不确定您在服务器上使用的是哪种语言(看起来像java),但是检查有关如何从Response Body检索数据的文档/教程,看起来您的控制器当前已设置为检索来自请求参数的数据,这就是为什么你可以检索Ajax Post的in data属性中的数据。

如果你需要我进一步解释,请给我一个喊叫。