通过线路将js数据发送到控制器

时间:2016-05-18 09:51:15

标签: javascript c# jquery asp.net-mvc asp.net-mvc-4

在js函数内部我创建了javascript对象,然后使用ajax将其发送到mvc控制器

var ab = { id: 100, name: "abc" }
$.ajax({
    type: "POST",
    url: "/home/dosomething",
    dataType: "json",
    contentType: "application/json",
    data: JSON.stringify(ab),
    success: function (result) {
        $("#myDiv").html(result);
        $("#showModal").modal("show");
    },
    error: function () {
        alert("error!");
    }
});

在服务器端我有

[HttpPost]
public ActionResult DoSomething(string ab) 
{
    ... ab is always null
}

我猜测我应该使用控制器方法中预期的其他数据类型而不是字符串?

5 个答案:

答案 0 :(得分:1)

您需要在操作方法中使用id和name

 [HttpPost]
 public ActionResult DoSomething(int id, string name) 
 {
    //code
 }

答案 1 :(得分:1)

试试这个:

JS:

var ab = { Id: 100, Name: "abc" }
$.ajax({
        type: "POST",
        url: "/home/dosomething",
        dataType: "json",
        data: JSON.stringify({ ab: ab }),
        success: function (result) {
            $("#myDiv").html(result);
            $("#showModal").modal("show");
        },
        error: function () {
            alert("error!");
        }
    });

控制器:

[HttpPost]
public ActionResult DoSomething(YourClass ab) 
{
  . . .
}

型号:

public class YourClass
{
    public int Id { get; set; }

    public string Name { get; set; }
}

答案 2 :(得分:0)

创建一个JSON对象的类,将其挂钩为Serializable

[Serializable]
public class SomeClass
{
    public int id { get; set; }

    public string name { get; set; }
}

在您的控制器中,您现在可以接受:

[HttpPost]
public ActionResult DoSomething([FromBody] SomeClass someclass){
  // code
}

答案 3 :(得分:0)

var ab = { id: 100, name: "abc" }
$.ajax({
    type: "POST",
    url: "/home/dosomething",
    dataType: "json",
    contentType: "application/json",
    // what if you pass data like this
    data: JSON.stringify({ab:ab}),
    success: function (result) {
        $("#myDiv").html(result);
        $("#showModal").modal("show");
    },
    error: function () {
        alert("error!");
    }
});

答案 4 :(得分:0)

如果要将{id:100,name:“abc”}作为字符串发送到控制器,则需要将ajax调用中的数据更改为

  

数据:JSON.stringify({ab:ab}),

如果您想将id和名称作为单独的参数发送,请将控制器更改为

public ActionResult DoSomething(string id, string name) 
{

}

和你的ajax调用数据

data: '{ "id":" 100 ","name":"abc" }',