Я выполняю 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);
}
Что я делаю неправильно?





Ваша проблема не связана с кендо.
С вашего контроллера вы должны вернуть объект 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);
}
Почему вы делаете вызов ajax, а затем используете
location.hrefдля перенаправления (весь смысл ajax заключается в том, чтобы оставаться на той же странице, и все, что вы делаете, снижает производительность. Просто выполните обычную отправку и перенаправление в методе POST )