在测验应用程序中,我有一个'问题'域对象,其中包含许多字段,包括问题描述和选择数量。我可以加载和查看第一个问题,如下所示,然后在表单提交我想发送此viewmodel并加载下一个问题对象,而无需回发。我看过几个使用jquery的ajax调用的例子,但我找不到任何可以通过控制器和视图之间的ajax调用传递整个对象的例子
@model BusinessModel.Question
@{
ViewBag.Title = "Survey";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("Survey", "Tools", new { QuestionId = Model.QuestionId }, FormMethod.Post, new { onsubmit = "return getCheckedRadioButton();" }))
{
<div id="QuestionContent">
<h2>Welcome To Quiz</h2>
<fieldset>
<p>
Question
@Model.QuestionId of @ViewBag.QuestionCount:
</p>
<p>
@Model.Description.
</p>
<ul style="list-style:none;">
@foreach (var item in Model.Answers)
{
<li> @Html.RadioButton("ChoiceList", item.score) @item.AnswerDesc</li>
}
</ul>
<input type="submit" value="Next" id="submitButton" />
</fieldset>
</div>
}
有什么想法吗?感谢
答案 0 :(得分:0)
您可以创建一个JavaScript对象,该对象在Question
类中具有相同的字段,并在提交时将其作为JSON对象传递给控制器。
var question = {};
// fill the viewmodel object.
$.ajax(
{
url: 'Tools/Survey/',
data: JSON.stringify({question : question }),
contentType: 'application/json',
dataType: 'json',
type: 'POST',
success: function (data) {
// data contains next question and you can create the view accordingly
},
error: function () {
// error
}
});
在Controller
中,您可以访问Question
并将下一个Question
作为JSON返回,如下所示;
[HttpPost]
public ActionResult Survey(Question question )
{
// get the next question
return Json(new { question = nextQuestion }, JsonRequestBehavior.AllowGet);
}
有关更多信息,请参阅以下帖子。
Pass Complex JavaScript Object to MVC Controller
它说明了我们如何将复杂的javascript对象传递给MVC控制器。
谢谢!