Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何在mvc3中将viewmodel对象从视图传递到控制器,然后从控制器传递到视图_Jquery_Ajax_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

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

Jquery 如何在mvc3中将viewmodel对象从视图传递到控制器,然后从控制器传递到视图,jquery,ajax,asp.net-mvc,asp.net-mvc-3,Jquery,Ajax,Asp.net Mvc,Asp.net Mvc 3,在一个测验应用程序中,我有一个“问题”域对象,它有许多字段,包括问题描述和选择数。我可以加载并查看第一个问题,如下所示,但在表单提交时,我想发送此viewmodel并加载下一个问题对象,而无需发回。我看到了一些使用jquery的ajax调用示例,但我找不到任何可以通过控制器和视图之间的ajax调用传递整个对象的示例 @model BusinessModel.Question @{ ViewBag.Title = "Survey"; Layout = "~/Views/Shared/_Layou

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

有什么想法吗?谢谢,您可以创建一个JavaScript对象,该对象在问题类中具有相同的字段,并在提交时将其作为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
    }
});
在控制器中,您可以访问问题并将下一个问题作为JSON返回,如下所示

[HttpPost]
public ActionResult Survey(Question  question )
{
    // get the next question
    return Json(new { question = nextQuestion }, JsonRequestBehavior.AllowGet);
}
更多信息请参考下面的帖子

它演示了如何将复杂的javascript对象传递给MVC控制器


谢谢

为什么不使用Ajax.BeginForm呢?请给出一个与我使用Ajax.BeginForm的要求类似的示例