如何将MV字典发送到MVC4中的控制器方法

时间:2015-01-12 15:42:05

标签: c# ajax json model-view-controller controller

我有一个js文件,必须将字典对象发送到服务器。我的javascript部分看起来像这样:

$.ajax({
            url: "/ControllerName/ActionName",
            type: 'post',
            dataType: 'json',
            data: myData
        });

其中 myData 类似于

this myData["favouritePet"] = "dog", myData["favouriteBook"] = "What?"

在控制器中我有这个:

[HttpPost]
public virtual ActionResult ActionName ( Dictionary<string, string> jsonFormattedData)
{


    return null;
}

但是当我调试它时,参数每次都会得到一个空值。我试着创建类型字符串的参数,但它是相同的。你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您只是传递JavaScript对象,因此您可以使用 JSON.stringify 并将Model作为Action参数。

MVC Model Binder会将其转换为您的模型。

enter image description here

public class MyDataModel
{
    public string FavouritePet { get; set; }
    public string FavouriteBook { get; set; }
}

// GET: Home
public ActionResult Index()
{
    return View();
}

[HttpPost]
public ActionResult Index(MyDataModel myData)
{
    return View();
}

<button id="btnSubmit" type="button">Submit</button>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
    $("#btnSubmit").click(function () {
        var myData = new Object();
        myData.favouritePet = "dog";
        myData.favouriteBook = "What?";

        $.ajax({
            url: '@Url.Action("Index", "Home")',
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify(myData),
            contentType: "application/json; charset=utf-8",
            success: function (){}
        });
    });
</script>