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가있는 레이아웃이 있습니다.
이 문제를 어떻게 해결할 수 있을지 정말 모르겠습니까?
나는 그것이 내 부분의 디자인 결함이라고 확신하지만, 나는 그것을 이해할 수 없다.
미리 감사드립니다.
예! 그 트릭을 했어! 그것은 꽤 논리적입니다! :), 나는 또한 LanguageWidget 포스트 액션에서 redirecttoaction을 사용했다! 고맙습니다! –