有没有办法传递一个对象数组,然后将它分配给模型?
我搜索过在模型和对象中创建相同的变量名称将完成工作,但它对我不起作用。
模型总是得到空值。
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#controller
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();
}
答案 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() {
....
并且不需要用于生成数组的代码。