如何将viewmodel对象从视图传递到控制器,然后从控制器传递到mvc3中的视图

时间:2014-07-13 18:32:21

标签: jquery ajax asp.net-mvc asp.net-mvc-3

在测验应用程序中,我有一个'问题'域对象,其中包含许多字段,包括问题描述和选择数量。我可以加载和查看第一个问题,如下所示,然后在表单提交我想发送此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>
}

有什么想法吗?感谢

1 个答案:

答案 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控制器。

谢谢!