2011-09-27 7 views
0

구체적인 모델로 View를 반환하는 작업 (색인)이 있습니다.Ajax에서 ActionResult로 모델 가져 오기

그보기 (달력입니다)에는 몇 달 동안 버튼을 변경해야합니다.

그 중 하나를 클릭하면 수정 된 모델과 동일한보기를 반환하는 색인 ​​작업이 다시 호출됩니다.

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

그래서, #right를 클릭하고는/홈/색인 전화 인덱스는 다음과 같은 결과를 리턴합니다 : 당신이 볼 그래서

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

, 나는 새와 DIV 번호 래퍼를 교체합니다. 완벽하지만 ...

응답 모델을 얻을 수있는 방법이 있습니까? 내 말은, 그 액션은 모델을 가지고 뷰를 반환하고, 모델을 원한다면 구체적인 div를 얻는 것을 제외하고 말입니다.

아이디어가 있으십니까?

답변

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")); 
}); 
+0

매력처럼 작동합니다. 고마워, 내 애플 리케이션은 조금 더 빨라서 새로운 것을 배웠다. –

0

한 가지 가능한 방법은 별도의 컨트롤러 액션을 호출하고 반환하는 것 JsonResult :이 작업은 당신이 당신의 AJAX 응답에서 참조 할 수 있습니다 당신의 ViewModel의 JSON 표현을 반환합니다

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

.

+0

그래, 내가 그 방법을 알고 있지만, 그것이의를 추가 아약스 전화, 한 달은 바뀌고 한 달은 요일을 지킵니다. 나는 가능한 한 1을 선호한다. 어쨌든 고마워. –

관련 문제