我有一个动作(索引),它返回一个具有特定模型的视图。
在该视图中(是一个日历)我有两个按钮可以改变几个月。
当我点击其中一个时,我回拨索引操作,将返回带有修改模型的相同视图。
$("#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。
有什么想法吗?
答案 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表示。