将数据从js发送到控制器

时间:2013-12-22 11:04:40

标签: asp.net-mvc

我有这个ajax:

function sendData() {
    var question = (document.getElementById('question').value).toString();
    var c = (document.getElementById('c').value).toString();
    $.ajax({
        url: '/Home/InsertData',
        type: 'POST',
        data: {question:question, c:c},
        // data: {},
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function () {
            alert('suc');
        },
        error: function (error) {
            alert('error');
        }
    });
}

在我的HomeController中,我有以下功能:

[HttpPost]
public void InsertData(string question, string c)
//public void InsertData()
{
    this.insertDataToCustomers(question, c);

}

当我运行它时,我收到了错误:

POST http://localhost:2124/Home/InsertData 500 (Internal Server Error) 

如果我没有在InsertData函数中询问输入值并且没有在ajax中发送数据,那么它可以正常工作。为什么我不能将数据发送到InsertData函数?

P.S。 questionc

中有值 谢谢你!

1 个答案:

答案 0 :(得分:2)

删除它:

contentType: 'application/json; charset=utf-8',

您没有向服务器发送任何JSON,因此这是请求的错误内容类型。您正在发送application/x-www-form-urlencoded请求。

所以:

function sendData() {
    var question = $('#question').val();
    var c = $('#c').val();
    $.ajax({
        url: '/Home/InsertData',
        type: 'POST',
        data: { question: question, c: c },
        success: function () {
            alert('suc');
        },
        error: function (error) {
            alert('error');
        }
    });
}

您的代码的另一个问题是您指示dataType: 'json'这意味着您希望服务器返回JSON,但您的控制器操作不会返回任何内容。这只是一种无效的方法。在ASP.NET MVC控制器中,操作应该返回ActionResults。因此,如果您想返回一些JSON来表示操作的状态,您可以这样做:

[HttpPost]
public ActionResult InsertData(string question, string c)
{
    this.insertDataToCustomers(question, c);
    return Json(new { success = true });
}

当然,您可以返回一个将被JSON序列化的任意对象,您将能够在success AJAX回调中访问它。