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

如何将Javascript中的对象数组传递给C#mvc5模型,javascript,c#,asp.net-mvc-5,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

是否有一种方法可以传递一个对象数组,然后将其分配给模型

我搜索到,在模型和对象中使用相同的变量名就可以了,但对我来说不起作用

模型总是得到空值

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);
    }
});
控制器

  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();
    }
public void insertQuestions(列出答案、,
列出答案(其他,int userid,字符串注释)
{
insertAnswers(答案、用户ID);
insertAnswer_others(回答_others,用户ID);
MySqlConnection myconn2=新的MySqlConnection(cmn.connstring);
myconn2.Open();
string query3=“插入注释(userid,comment)值”+
“(@userid,@comment)”;
MySqlCommand cmd2=新的MySqlCommand(query3,myconn2);
cmd2.Parameters.AddWithValue(“@userid”,userid);
cmd2.Parameters.AddWithValue(“@comment”,comment);
cmd2.ExecuteNonQuery();
myconn2.Close();
}

使用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() {
        ....

而且不需要任何生成数组的代码。

谢谢你的帮助。@StephenMuecke你可以把它作为答案添加进去