2012-07-31 3 views
1

MVC 웹 애플리케이션의 관리 부분에서 작업하고 있습니다. 하나의 관리자 패널에 "위젯"을 사용하려는 생각이 들었습니다. 먼저 내 의도를 설명 할게.부분 뷰 HttpGet 대신 HttpPost가 호출됩니다.

언어 표가 있습니다.이 언어에 대한 드롭 다운 목록과 부분보기를 만들려면 편집 버튼을 누르십시오. 사용자가 부분보기를 편집 할 수 있습니다. 언어. 저장을 클릭하면 사용자가 인덱스보기로 리디렉션되며 드롭 다운 목록이 다시 표시됩니다.

그래서 "Index.cshmtl"및 "EditLanguage.cshtml"이 부분보기가 아니며 "LanguageWidget.cshtml"이 부분보기로 사용됩니다.

먼저 사용자에게 색인보기가 표시됩니다.

public ViewResult Index() 
    { 
     return View(); 
    } 

이보기는 다음 코드를 가지고 :

@using CodeBox.Domain.Concrete.ORM 
@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<h2>Administration</h2> 
@Html.Action("LanguageWidget") 

부분보기 "LanguageWidget는"바로 다음 코드를 포함하고, 사용자가 제출 때 내 컨트롤러에 HttpPost 주석 방법에 게시 : [HttpPost] 공개 ActionResult LanguageW :

@using (Html.BeginForm("LanguageWidget", "Admin")) 
{ 
    @Html.DropDownListFor(model => model.SelectedItem, Model.Languages) 
    <input type="submit" value="Edit"/> 
} 

이것은 위젯의 HttpPost 방법이며 idget (LanguageWidgetModel 모델) { var lang = langRepo.Languages.FirstOrDefault (l => l.LanguageId == model.SelectedItem); 돌아 가기보기 ("EditLanguage", lang); }

사용자가 제대로 작동하는 언어 편집 페이지로 이동합니다.

하지만! 사용자가 언어를 편집하고 "EditLanguage"HttpPost 메서드를 호출하는 페이지를 제출하여 언어가 올바르게 저장됩니다.

[HttpPost] 
    public ViewResult EditLanguage(Language model) 
    { 
     if (ModelState.IsValid) 
     { 
      langRepo.SaveLanguage(model); 
      TempData["message"] = string.Format("{0} has been saved!", model.Name); 
      return View("Index"); 
     } 
     else 
     { 
      return View(model); 
     } 
    } 

그래서, 나는 "인덱스"보기 돌아올 때 - 내가 생각 논리적 보인다 - 컨트롤러가 여전히이 HttpPost 요청 있다고 가정하고이 인덱스보기를 렌더링 할 때, 그것은 "LanguageWidget"메소드를 호출을, HttpPost 메서드를 렌더링해야한다고 가정합니다.

이것은 LanguageWidget HttpPost 메서드로 연결됩니다.이 메서드는 레이아웃이 포함 된 전체보기를 반환하고, 바로 그 결과를 반환하므로 뷰가있는 뷰와 함께 editview가있는 레이아웃이 있습니다.

이 문제를 어떻게 해결할 수 있을지 정말 모르겠습니까?

나는 그것이 내 부분의 디자인 결함이라고 확신하지만, 나는 그것을 이해할 수 없다.

미리 감사드립니다.

답변

1

은 사용을 고려 :

return RedirectToAction("Index") 

대신 : 사용자가 실제로 EditLanguage에 남아있는 Index 대신 로 재 지정된 경우

return View("Index"); 

그것은 더 논리적 보일 수 있습니다. 그리고 사용자가 새로 고침 버튼을 누르는 경우이 접근법을 사용하여 데이터가 재전송되지 않습니다.

+0

예! 그 트릭을 했어! 그것은 꽤 논리적입니다! :), 나는 또한 LanguageWidget 포스트 액션에서 redirecttoaction을 사용했다! 고맙습니다! –