2010-01-07 3 views
1

저는 MVC를 처음 접했습니다. 제발 저와 함께하시기 바랍니다. :-)렌더링 동작 return View(); 양식 문제

강하게 입력 된 "스토리"보기가 있습니다. 이보기 (이야기)는 댓글을 가질 수 있습니다.

내 의견 컨트롤러에 "ListStoryComments"및 "CreateStoryComment"라는 두 개의 뷰 (부분이 아님)를 만들었습니다.이 뷰는 이름이 암시하는 것을 수행합니다. 이 뷰는

<!-- List comments --> 
<h2>All Comments</h2> 
<% Html.RenderAction("ListStoryComments", "Comments", new { id = Model.Story.Id }); %> 

<!-- Create new comment --> 
<% Html.RenderAction("CreateStoryComment", "Comments", new { id = Model.Story.Id }); %> 

(I는 관련 의견을 표시하기 위해 스토리 아이디 전달) : 예컨대, RenderAction을 사용하여 스토리보기에 포함되어 있습니다.

양식을 사용하여 새 메모를 게시 할 때 현재 (부모)보기를 반환하지만 메모 양식 필드에 입력 한 마지막 콘텐츠가 계속 표시되고 ListStoryComments보기 isn 새로운 이야기를 보여주기 위해 업데이트되었습니다.

기본적으로 브라우저의 뒤로 버튼을 누른 것처럼 캐시에서 페이지가로드되고 있습니다. f5 키를 누르면 양식을 다시 게시하려고 시도합니다. 페이지를 수동으로 다시로드 (브라우저 주소 표시 줄에 URL 다시 입력) 한 다음 f5 키를 누르면 새 내용과 빈 양식 필드가 표시됩니다. 이는 원하는 결과입니다. 완성도를 들어

내 CreateStoryComment 조치는 다음과 같습니다

[HttpPost] 
    public ActionResult CreateStoryComment([Bind(Exclude = "Id, Timestamp, ByUserId, ForUserId")]Comment commentToCreate) 
    { 
     try 
     { 
      commentToCreate.ByUserId = userGuid; 
      commentToCreate.ForUserId = userGuid; 
      commentToCreate.StoryId = 2; // hard-coded for testing 

      _repository.CreateComment(commentToCreate); 
      return View(); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 
+0

난 그냥 필 Haack에 의해 다른 MVC 비디오를보고 있었다 그가 "PRG"패턴을 언급 (포스트, 리디렉션이 오기)해야 나는이 문제를 해결할 것이라고 생각한다. 그러나, 내가 'Return RedirectToAction ("Index");'과 같은 것을 시도한다면, "자식 작업은 리디렉션 작업을 수행 할 수 없습니다."라는 오류가 발생하므로 여전히 난처한 상태입니다. –

답변

1

I, 이것은 개인의 의견, 당신이 잘못된 방향으로 달려 드는 것 같아요.

개인적으로는;

  1. ListStories라는보기를 만듭니다.
  2. 이야기를 나열하는 부분보기를 만듭니다.
  3. 부분보기를 작성하여 스토리를 작성하십시오.
  4. 이야기를 추가하려면 간단히 에 기사 추가 html을 표시하십시오. 사용자가 당신이 jQuery를 다시 게시 할 버튼을 누를 때
  5. 는 그런 다음 새로운 이야기를 추가하고 PartialView 새로운 이야기 또는 모든 이야기 중 하나의 을 반환합니다.
  6. 이야기의 부분보기를 반환하는 경우 모든 이야기 을 포함하는 경계 div를 새 데이터로 바꿉니다.
  7. 단 하나의 이야기 만 반환하는 경우 다음 이야기가 들어있는 div 끝 부분에 추가하십시오.

나는 이것이 많은 재 작업을 의미한다는 것을 알고 있으며 많은 일을 좋아하지만 부분보기를 재사용 할 수 있기 때문에 나중에 더 큰 유연성을 의미합니다. 한 번 변경하면 해당 부분보기를 사용하는 모든보기가 업데이트됩니다.

또한 jQuery를 사용하면 스토리를 추가하는 것이 멋지다는 것을 알 수 있습니다.

+0

답장을 보내 주셔서 감사합니다 ... 정확히 내가 찾던 것이 아니지만 시간 내 주셔서 감사합니다! –

3

대답은 return RedirectToAction()을 사용하는 것입니다. 이를 사용하여 PRG 패턴을 적용하고 목표를 달성합니다.내 원래의 게시물에

내 이전 댓글이 나는, 나는 아직도 혼동 것 같아 것으로, 오류가 발생했지만이 작품 :

return RedirectToAction("Details", "Steps", new { id = "2" }); 
0

문제가 캐싱 될 것으로 보인다 때문에, 당신은 단순히 해제 할 수 있습니다/캐싱을 제한하십시오.

[OutputCache(Duration = 0, VaryByParam = "none")] 

이 페이지를 캐시 브라우저를 말할 것이다, 그러나 0초에 대한 :

는 당신의 행동에 다음 속성을 추가합니다. 게시물이 페이지를 다시로드하면 원하는 결과가 표시됩니다.

0

답변은 양식 작업이 올바르게 설정되어 있는지 확인하는 것입니다. 렌더링을 사용하고 양식 컨트롤러 및 작업을 수동으로 설정하지 않은 경우 작업이 현재 URL이됩니다.

시도 대신의

<% using (Html.BeginForm("ActionName", "ControllerName")) {%> 

:

<% using (Html.BeginForm()) {%>