매번 다른 뷰 집합을 사용하여 뷰를 여러 번 호출하는 MVC4 컨트롤러가 있습니다.여러 포스트 백을 통해 MVC4 컨트롤러 데이터 지속
@using (Html.BeginForm())
{
@if (ViewBag.Foo1 != null)
{
@Html.DropDownList("Bar1",....
}
@if (ViewBag.Foo2 != null)
{
@Html.DropDownList("Bar2",....
}
<input name="ActionButton" type="submit" value="Ok"" />
}
사용자가 제출 버튼을 클릭 할 때마다, 상기 제어기의 검사는 수집 및 차종에 무슨 볼 : 뷰는 같은 것을 통해 부재 또는 그 ViewBags의 존재에 기초하여 폼의 콘텐츠를 렌더링 일종의 같이, 다시보기를 호출하기 전에 ViewBags의 새로운 세트 : 내가 지금해야 할 것은 각 패스 컨트롤러를 목 한 어떻게 든
public ActionResult Create()
{
ViewBag.Foo1 = "blawblaw";
return View();
}
[HttpPost]
public ActionResult Create(FormCollection collection)
{
if (collection["Bar1"] != null)
{
string FirstPass = collection["Bar1"];
ViewBag.Foo2 = "blawblaw";
}
if (collection["Bar2"] != null)
{
string SecondPass = collection["Bar2"];
ViewBag.Foo3 = "blawblaw";
}
return View();
}
이전의 패스에 대해 뭔가를 '기억'. 즉, 필자의 예제에서 컨트롤러 (컬렉션 [ "Bar2"]가 참인 곳)를 통과 한 두 번째 패스는 FirstPass의 값이 null입니다.
어떻게하면됩니까?
MVC로 WebForm을 다시 만들려고하는 것 같아서 옳은 길은 아닙니다. MVC는 무국적자입니다. 사용자가 데이터를 어딘가에 보관하지 않는 한, 사용자가 이미 게시 한 내용을 '기억'하지 않습니다. 뷰백을 과도하게 사용하는 대신 모델 바인딩을 살펴보고 다른 컨트롤러를 사용해야합니다. 같은 URL을 통해 모든 것을 강제로 시도하지 마십시오 또는 [이 함정] (http://37signals.com/svn/posts/2316-so-much-complexity-in-software-comes-from)로 떨어질 수 있습니다. . – Nick
나는 그것을 얻는다. .. 그러나이 앱의 90 %는 직선적 인 MVC CRUD 기능이며 MVC는 거기에 잘 들어 맞는다. 이 한 페이지에서는 모델 업데이트를하기 전에 필요한 세부 정보를 수집하기 위해 사용자에게 몇 가지 단계를 안내해야합니다. – davecove