2011-03-17 2 views
8

의견 목록을 표시하는보기가 있습니다. 이 작업은 DisplayTemplate을 통해 수행됩니다. 내가해야 할 일은 @Html.DisplayFor(x => x.BlogPost.PostComments)과 같은 것이고 모든 주석은 적절하게 표현됩니다.MVC 3 - 작업 메서드에서 표시 템플릿을 반환하는 방법은 무엇입니까?

페이지 하단에 새 설명을 추가하는 양식이 있습니다. 이 페이지는 점진적 향상 기능을 사용합니다. 따라서 javascript가 비활성화 된 상태에서 양식이 정상적으로 제출되고 데이터베이스에 주석을 추가 한 다음 블로그 게시물을 렌더링하는 작업으로 리디렉션합니다. 그러나, 자바 스크립트를 사용할 수있는 경우 jQuery 양식의 제출을 ​​납치하고 아약스를 통해 게시물을 만듭니다. 주석 마크 업이 디스플레이 템플릿에 있기 때문에 jQuery가 페이지에 드롭 할 수 있도록 액션 메소드에서 주석 마크를 반환하는 방법을 모르겠습니다.

부분보기에서이를 수행하는 방법을 알고 있습니다. 나는 액션 메소드가 올바른 부분 뷰를 반환하도록하고 jquery는 페이지의 코멘트 컨테이너에 응답을 추가 할 것이다.

부분보기를 위해 내 표시 템플릿을 자르기 전에 컨트롤러에서 표시 템플릿을 다시 보내기 위해 놓친 간단한 방법이 있습니까? 여기

내 행동 방법 :

<div class="comments"> 
    @Html.DisplayFor(x => x.BlogPost.BlogPostComments) 
</div> 

난 그냥 원하는 :

public ActionResult AddComment(PostComment postComment) 
    { 
     postComment.PostedDate = DateTime.Now; 
     postCommentRepo.AddPostComment(postComment); 
     postCommentRepo.SaveChanges(); 
     if (Request.IsAjaxRequest()) 
      return ??????? 
     else 
      return RedirectToAction("BlogPost", new { Id = postComment.BlogPostID }); 
    } 

는 표준 방법으로 템플릿을 사용하기 때문에 페이지가로드가 그것에 대해 걱정할 필요가 없습니다

jQuery에 디스플레이 템플릿을 사용하는 단일 주석을 어떻게 보낼지 알고 싶습니다.

답변

2

this question 무엇을 찾고 계하십니까? 액션에서 HTML 도우미를 호출 할 수 있음을 나타냅니다.

당신은 새로 게시 된 의견 나타내는 부분 HTML 반환하려고 할 수 있습니다
+1

이는 대답이다. 나는이 부분적인 부분을 보았습니다. 그럼에도 불구하고 대답에 감사드립니다. – Chev

10

:

$.post('@Url.Action("AddComment")', { ... }, function (result) { 
    $('#comments').append(result); 

    // or $('#comments').prepend(result); if you want it to appear on top 
}); 
0

이 부분 뷰를 작성/공유 :

if (Request.IsAjaxRequest()) 
{ 
    return PartialView(
     "~/Views/Shared/DisplayTemplates/Comment.cshtml", 
     postComment 
    ); 
} 

및 클라이언트 측

는 의견 컨테이너에이 댓글을 추가를 /DisplayTemplate.cshtml을 다음 면도기 코드로 바꿉니다 :

@Html.DisplayFor(m => Model) 

그런 다음 컨트롤러에 (또는 바람직하게는 기본 컨트롤러 클래스에서)이 라인을 따라하는 방법을 추가

protected PartialViewResult PartialViewFor(object model) 
{ 
    return PartialView("DisplayTemplate",model); 
} 

를 OP의 경우 다음이 모든 생각이 hackish 비록

public ActionResult AddComment(PostComment postComment) 
{ 
    postComment.PostedDate = DateTime.Now; 
    postCommentRepo.AddPostComment(postComment); 
    postCommentRepo.SaveChanges(); 
    if (Request.IsAjaxRequest()) 
     return PartialViewFor(postComment); 
    else 
     return RedirectToAction("BlogPost", new { Id = postComment.BlogPostID }); 
} 
+0

부분 뷰를 통해 디스플레이 템플릿을 반환하지 않습니다. 부분 뷰 "DisplayTemplate"의 이름을 지정할 수는 있지만 같은 것은 아닙니다. – Chev

+0

부분보기는 "DisplayTemplate"이라고 부르지 만, 아무 것도 호출하지 못했습니다. 요점은 partial이 MVC 템플릿 엔진에 모델을 전달 했으므로 모델에 대한 표시 템플릿이있는 경우 사용됩니다. – comonuirons

+0

나는 당신이하는 일을 알고 있지만, 이것은 내가 좋아하지 않는 디스플레이 템플릿을 호출하는 빈 부분 뷰를 생성한다. – Chev

관련 문제