MVC: при возврате из контроллера при вызове Ajax результат не определен

Я делаю Ajax-вызов контроллеру при нажатии кнопки Kendo и возвращаю модель:

@(Html.Kendo().Button()
                    .Name("btnSubmit")
                    .HtmlAttributes(new { type = "button" })
                    .Icon("rotate")
                    .Content("View Details"))

<script>
    $("#btnSubmit").click(function () {
        $.ajax({

            url: "/MyController/MyMethod/",
            type: 'post',
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            success: function (result) {
                window.location.href = "@Url.Action("RedirectToView", "MyController", new { myModel = "data" })".replace("data", result);
            }
        })
    });
</script>

Метод контроллера возвращает модель:

[AcceptVerbs(HttpVerbs.Post)]
public JsonResult MyMethod()
{
    var reportDate = Session["FileDate"] == null ? DateTime.Now : Convert.ToDateTime(Session["FileDate"].ToString());
    var myModel = new MyModel();
    myModel.ColOfData = myModel.GetColOfData(reportDate);
    return Json(myModel, JsonRequestBehavior.AllowGet);
}

Когда я отлаживаю свою функцию Ajax, результат не определен. Результат должен быть присвоен MyModel, так как я возвращаю модель обратно в функцию Ajax. Мне нужно передать этот результат другому методу в контроллере, который вернет мой Partial View, содержащий сетку:

public ActionResult RedirectToView(MyModel myModel)
{
    return PartialView("_MyPartialView", myModel);
}

Что я делаю не так?


person gene    schedule 02.08.2018    source источник
comment
Почему вы делаете вызов ajax, а затем используете location.href для перенаправления (вся суть ajax заключается в том, чтобы оставаться на той же странице, и все, что вы делаете, это снижает производительность. Просто сделайте нормальную отправку и перенаправление в методе POST )   -  person    schedule 03.08.2018


Ответы (1)


Твоя проблема не связана с кендо.

С вашего контроллера вы должны вернуть объект json, подобный этому

return Json(new {result=myModel});

И в вашем результате ajax у вас будет вся ваша модель.

После этого из предоставленного вами кода я боюсь, что вы не сможете передать всю свою модель в URL-адресе вашего GET.

Вероятно, вы могли бы передать идентификатор модели так

 window.location.href = "@Url.Action("RedirectToView", "MyController", new { id= "modelId" })".replace("modelId", result.Id);

И сделайте свое действие чем-то вроде этого

public ActionResult RedirectToView(string id){
    // Get the model data you want .....
    return PartialView("_MyPartialView", myModel);
}
person Anastasios Selmani    schedule 02.08.2018