如何将Javascript中的对象数组传递给C#mvc5模型

时间:2017-07-23 09:38:22

标签: javascript c# asp.net-mvc-5

有没有办法传递一个对象数组,然后将它分配给模型?

我搜索过在模型和对象中创建相同的变量名称将完成工作,但它对我不起作用。

模型总是得到空值。

var answers = [];
var answerOthers = [];
var comment = $("#message").val();

$("input:radio:checked").each(function () {
    var questno = $(this).attr("data-question");
    var ansid = $(this).val();

    answers.push({ QUESTIONID: questno, ANSWERID: ansid});

    if ($(this).val() == 3)
    {
        var txtOther = $("#otherTxt-" + $(this).attr("data-question")).val();
        answerOthers.push({
            QUESTIONID: questno,
            ANSWER: txtOther
        });
    }
});
$.ajax({
    url: 'insertQuestions',
    data: { answers: answers, answer_others: answerOthers, userid: userid   , comment: comment },
    method: 'GET',
    success: function ()
    {
        alert("saved");
    },
    error: function (e)
    {
        console.log(e);
    }
});

c#c​​ontroller

  public void insertQuestions(List<ratingsModel.ANSWERS> answers,
        List<ratingsModel.ANSWERS_OTHERS> answer_others, int userid , string comment)
    {
        insertAnswers(answers,userid);
        insertAnswer_others(answer_others, userid);

        MySqlConnection myconn2 = new MySqlConnection(cmn.connstring);
        myconn2.Open();
        string query3 = "INSERT INTO comments (userid,comment) VALUES" +
                       " (@userid,@comment)";
        MySqlCommand cmd2 = new MySqlCommand(query3, myconn2);
        cmd2.Parameters.AddWithValue("@userid", userid);
        cmd2.Parameters.AddWithValue("@comment", comment);
        cmd2.ExecuteNonQuery();
        myconn2.Close();
    }

1 个答案:

答案 0 :(得分:0)

你不能用GET做到这一点(传递给方法的数据需要是一个查询字符串,要表示你的集合,你需要使用集合索引器的单个名称/值对,例如

data { [0].QUESTIONID: xx, [0].ANSWERID: yy  [1].QUESTIONID: zz, .... etc }

但在任何情况下都不应该是GET。您的方法正在更改数据,因此它应该是一个POST(此外,如果您的集合很大,您将超出查询字符串限制并抛出异常)

将ajax代码更改为

$.ajax({
    url: @Url.Action('insertQuestions'), // dont hard code your url's
    data: JSON.stringify({ answers: answers, answer_others: answerOthers, userid: userid, comment: comment }) // modify,
    contentType: 'application/json', // add
    method: 'POST', // change
    success: function() {
        ....

作为旁注,如果您使用强类型HtmlHelper方法正确生成了表单,那么您的代码可能只是

$.ajax({
    url: @Url.Action('insertQuestions'), 
    data: $('form').serialize(),
    method: 'POST',
    success: function() {
        ....

并且不需要用于生成数组的代码。

相关问题