2011-01-13 6 views
2

Asp.net MVC 2에서 새 프로젝트를 시작합니다. 저는 주로 webforms 개발자였으며 ​​Asp.Net MVC에 대한 노출이 제한되어있어 아마도 멍청한 놈.Asp.Net MVC 입력란에 오류가있는 페이지로 돌아 가기

내 상황은 다음과 같습니다. DB에 일부 데이터를 저장하기위한 만들기 페이지가 있습니다. 이 페이지에 대한 뷰는 강력하게 바인딩되거나 입력되지 않습니다. 따라서 뷰에서 데이터를 추출하는 방법은 POST 매개 변수를 보는 것입니다.

오류 (데이터 유효성 검사 등)가 발생했기 때문에 이전 페이지로 되돌려 보내야합니다. 모든 내용이 그대로 표시되고 메시지가 표시됩니다.

웹 폼에서 뷰 상태로 인해 자동으로 처리되었지만 여기서는 동일한 작업을 수행 할 수 있습니까? 다음과 같이

코드 예제가 될 수 있습니다

보기 :

<% using (Html.BeginForm("Create", "Question", FormMethod.Post)) { %> 
<div> 
Title: <%: Html.TextBox("Title", "", new { @style="width:700px" })%> 
</div> 
<div> 
Question: <%: Html.TextBox("Question", "", new { @style="width:700px" })%> 
</div> 
<input type="submit" value="Submit" /> 
<% } %> 

컨트롤러 :

[HttpPost] 
    [ValidateInput(false)] 
    public ActionResult Create() { 
     Question q = new Question(); 
     q.Title = Request.Form["Title"]; 
     q.Text = Request.Form["Question"]; 
     if(q.Save()) { 
      return RedirectToAction("Details", new { id = q.Id }); 
     } 
     else { 
      // Need to send back to Create page with data filled in 
      // Help needed here 
     } 
    } 

감사합니다.

답변

1

오류가 발생한 경우보기를 반환 할 수 있습니다. 이것은 문맥을 보존 할 것이다.

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Create(Question q) { 
    if(q.Save()) { 
     return RedirectToAction("Details", new { id = q.Id }); 
    } 
    else { 
     // Need to send back to Create page with data filled in 
     // Help needed here 
     return View(); 
     // If the view is located on some other controller you could 
     // specify its location: 
     // return View("~/Views/Question/Create.aspx"); 
    } 
} 

강력한 형식의 도우미와 함께 강력한 형식의보기를 사용하는 것이 좋습니다. 어떻게 행동 매개 변수로 직접 Question 개체를 사용했는지 확인하십시오. 이는이 객체를 직접 추출하고 작성한 코드와 동일합니다. 모델 바인더는이 작업을 자동으로 수행합니다.

+0

안녕하세요! 슈퍼 빠른 답장을 보내 주셔서 감사합니다 -하지만이 나를 위해 작동하지 않습니다. 페이지로 리디렉션 할 수 있지만 입력란은 비어 있습니다. 위에 붙여 넣은보기 코드와 다르게해야 할 일이 있습니까? – saurabhj

+0

리디렉션 할 필요가 없습니다. 오류가있는 경우 else 섹션에 표시된대로 View를 반환합니다. 이렇게하면 컨텍스트가 보존됩니다. 리디렉션하면 컨텍스트가 손실됩니다. 성공한 경우 데이터베이스에 값을 저장 한 다음 ID 만 전달하여 리디렉션해야하므로 (세부 사항 작업에서이 ID를 사용하여 데이터베이스에서 저장 한 값을 가져올 수 있음) –

+0

"리디렉션"을 의미하지 않았습니다. 오해가 생겨서 죄송합니다. 내가하고있는 일은 다음과 같다. return View ("~/Views/Question/Ask.aspx"); 귀하의 제안에 따라 -하지만 뷰는 컨트롤러에 게시 된 데이터를 보유하지 않습니다. html.TextBox ("제목", % "새로운 <@ style ="너비 : 700px "}) %><% : Html.TextBox ("제목 ") %> 값은 그냥 공백입니다. 나는 그것이 매우 표준적인 것이라고 확신하고 나는 물건을 놓치고있다. 감사. – saurabhj

관련 문제