2017-04-25 3 views
0

초급 질문 - 저는 HomeController, HomeModel 및 HomeView가 있습니다. 사용자가 http://page/Home 페이지를 방문하면 Index 메서드가 실행되고 일부 컨트롤을 채울 수 있습니다. 단추를 클릭하면 (다시 게시) 처리 과정이 실행되고 오류가 발생하면 응용 프로그램에서 ModelState.AddModelError 메서드를 호출합니다. 그런 다음 Index 작업이 다시 호출되고 페이지에 오류를 표시 할 수 있습니다.새로운보기를 반환 할 때 URL을 유지하는 방법

제대로 작동하지만 문제는 포스트 백 이후 새 URL이 http://page/Home 대신 http://page/Home/Index 인 것입니다. 어떤 생각이 어떻게 이것을 방지하기 위해?

PS - 난 this 솔루션을 시도하지만 새 URL은 http://page/Home?...long string of serialized ModelState data...

내 컨트롤러 같은했다 :

[HttpGet] 
public ActionResult Index(MyModel model) 
{ 
    return View(model); 
} 

[HttpPost] 
public ActionResult Process(MyModel model) 
{ 
    if (...error...) 
    { 
     model.SetErrorState(); 
     ModelState.AddModelError("ProcessError", "error message"); 
     return View("Index", model); 
    } 
    else 
    { 
     // do something... 
     model.SetSuccessState(); 
     return View("Index", model); 
    } 
} 

답변

2

문제는 당신이 HttpPost 행동을 새로운 URL로 밀어하고있다가. 이 값을 Home 액션의 HttpPost 버전으로 변경하면 실수로 URL이 변경되지 않고 페이지로 돌아갈 수 있습니다.

[HttpGet] 
public ActionResult Index(ImportData model) 
{ 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(MyModel model, FormCollection data) 
{ 
    if (...error...) 
    { 
     model.SetErrorState(); 
     ModelState.AddModelError("ProcessError", "error message"); 
     return View(model); 
    } 
    else 
    { 
     // do something... 
     model.SetSuccessState(); 
     return View(model); 
    } 
} 
+0

내 질문에 실수를했습니다. 두 가지 방법 모두 'MyModel'과 동일한 유형의 매개 변수가 필요합니다. 이 문제를 해결하고 솔루션을 적용하면 컴파일러에서 'HomeController Type이 이미 동일한 매개 변수 유형의 Index라는 멤버를 정의합니다.'라는 오류가 발생합니다. – sventevit

+0

@sventevit를 업데이트했습니다 :) (미사용)'FormCollection' var을 추가하여 구별하십시오. – scgough

+0

완벽, 고마워요 :) @ scgough에 – sventevit

관련 문제