【问题标题】:how to pass array of object in Javascript to C# mvc5 model如何将Javascript中的对象数组传递给C#mvc5模型
【发布时间】:2017-12-29 00:55:00
【问题描述】:

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

我搜索了在您的模型和对象中使用相同的变量名称可以完成工作,但它对我不起作用。

模型总是得到空值。

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#控制器

  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();
    }

【问题讨论】:

  • 谢谢它对我有用。
  • @StephenMuecke 您可以将其添加为答案

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


【解决方案1】:

你不能用 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() {
        ....

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多