Ajax到ActionResult,获得Model

时间:2011-09-27 20:48:56

标签: jquery asp.net-mvc ajax

我有一个动作(索引),它返回一个具有特定模型的视图。

在该视图中(是一个日历)我有两个按钮可以改变几个月。

当我点击其中一个时,我回拨索引操作,将返回带有修改模型的相同视图。

$("#right").live("click", function () {
    $.post($(this).attr("href"), function (response) {
        $("#wrapper").replaceWith($(response).filter("div#wrapper"));
    });
    return false;
});

所以,我点击#right并调用/ Home / Index和Index返回类似的内容:

return View(new DateViewModel(dt, _bDays.GetDaysFromMonth(dt)));

如您所见,我将div#wrapper替换为新的。完美但是......

有没有办法获得响应模型?我的意思是,该动作返回一个模型的视图,除了得到我希望模型的具体div。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我不知道为什么你需要在AJAX回调中使用该模型,因此可能有一个比我要提出的解决方案更好的解决方案。因此,您可以让控制器操作render the partial view into a string,然后返回包含HTML和模型的JSON对象:

[HttpPost]
public ActionResult MyAction()
{
    MyViewModel model = new DateViewModel(dt, _bDays.GetDaysFromMonth(dt));
    string html = RenderPartialToString("partialName", model);
    return Json(new { Model = model, Html = html });
}

并在您的AJAX回调中:

$.post($(this).attr("href"), function (response) {
    var model = response.Model;
    var html = response.Html;
    $("#wrapper").replaceWith($(html).filter("div#wrapper"));
});

答案 1 :(得分:0)

一种可能的方法是调用单独的控制器操作并返回JsonResult

[HttpPost]
public ActionResult MyAction()
{
    return Json(new DateViewModel(dt, _bDays.GetDaysFromMonth(dt)));
}

此操作将返回您可以在AJAX响应中引用的ViewModel的JSON表示。