2014-09-16 5 views
1

ModelState 유효성 검사가 실패하면 ASP.NET MVC 5 응용 프로그램에서 다음 코드는 사용자에게 원래보기를 다시 보내야합니다.ModelState.IsValid는 400 잘못된 요청을 반환합니다.

사용자에게 유효성 검사에 실패한 입력과 관련된 오류 메시지가 표시됩니다.

IE
IE

크롬
Chrome

: 내 ModelState이 무효 인 경우에

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit(DemoViewModel model) 
{ 
    if (!ModelState.IsValid) return View(model); 

    ... 

    return RedirectToAction("Details"); 
} 

그러나, 현재, 나는 400 잘못된 요청 오류 페이지를 얻을 이니 시아 lly, 이것은 맞춤 오류 페이지의 구성이 잘못되었다고 생각했습니다. 이 문제를 해결하기 위해 동일한 오류 페이지 구성으로 새 프로젝트를 만들었으므로 문제를 다시 만들 수 없습니다.

의 Web.config이 방법을 부러 졌을 수 무엇

<customErrors mode="On" defaultRedirect="~/500.aspx" redirectMode="ResponseRewrite"> 
    <error statusCode="401" redirect="~/401.aspx" /> 
    <error statusCode="403" redirect="~/401.aspx" /> 
    <error statusCode="404" redirect="~/404.aspx" />  
</customErrors> 

의 Web.config의 httpErrors

<httpErrors errorMode="Custom" > 
    <remove statusCode="401" /> 
    <error statusCode="401" path="401.html" responseMode="File" /> 
    <remove statusCode="403" /> 
    <error statusCode="403" path="401.html" responseMode="File" /> 
    <remove statusCode="404" /> 
    <error statusCode="404" path="404.html" responseMode="File"/> 
    <remove statusCode="500" /> 
    <error statusCode="500" path="500.html" responseMode="File" /> 
</httpErrors> 

을 customErrors에 : 그냥 참조

, 여기에 오류 설정입니다 ModelState이 처리 되었습니까?

+0

IF 조건에 중단 점을 넣으면 코드 블록이 디버깅되었는지 확인합니다. 도달 할 수없는 코드가있을 수 있습니다. –

+0

"편집"이라는 이름의보기가 있습니다. –

+0

@Kartikeya 예,보기가 사용 가능합니다. – philreed

답변

0

나는 내 문제의 원인을 발견합니다.

오류를 일으키는 페이지에는 2 개의 양식이 있는데, 하나는 모달에서만 볼 수있는 페이지이고, 다른 하나는 디버그하려고했던 주 폼입니다. 실수로 주 양식이 문제의 원인이라고 생각했습니다. 실제로는 모달로 표시되는 숨겨진 양식이었습니다.

광범위한 디버깅 후 다른 동작에서 코드의 빗나간 줄을 발견했지만 문제를 일으키는 것으로 생각하지 않았습니다.

의견을 제안한 사람들에게 감사드립니다.

0

컨트롤러 작업에서 GET 요청을 실행 중이지만 POST가 필요합니다. 이로 인해 오류 코드 400이 표시됩니다.

편집하려는 개체를 표시하는 편집 작업으로 리디렉션 할 수 있습니다. 당신을 가정

는 뷰 모델에 ID가 당신의 편집 작업은 다음과 같이 수행 int Id을 기대 :

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit(DemoViewModel model) 
{ 
    int modelId = model.Id; 
    if (!ModelState.IsValid) { 
     //call the Edit action which displays the item .. or details. 
     //Not an ActionResult decorated as [HttpPost]! 
     return RedirectToAction("EditGetAction", new { id = modelId }); 
    } 

    ... 

    return RedirectToAction("Details"); 
} 
+0

나는 왜 당신이 이것을 제안하는지보고, 나는 POST를 보내고 있는지 다시 한 번 확인 할 것이다. 그러나 Invalid ModelSate의'Edit' 액션으로 리다이렉트하는 것에 대해서는 확신하지 못합니다. 유효하지 않은 요소는 뷰가 렌더링 될 때 유지되지 않습니다. 나는 POST 요청을 발행하는지 다시 한 번 확인합니다. – philreed

+0

확실히'POST' 요청을 보내고 있습니다. 이 메소드는 내 뷰의'BeginForm' HTML 도우미에서'FormMethod.Post'를 사용하여 명시 적으로 설정됩니다. 또한 '네트워크'추적 도구를 사용하여 IE 및 Chrome 내의 개발자 도구를 사용하여 'POST'요청을 보내고 있음을 확인했습니다. – philreed

+0

Fiddler 또는 다른 프록시를 사용하여이 사실을 확인 했습니까? Httpverb 행의'if (! ModelState.IsValid) return View (model); – Marco

관련 문제