2011-01-06 5 views
11

아마도 뭔가가 누락되었지만 같은 작업으로 다시 게시되는 양식이있을 때 텍스트 값이 이전 값으로 되돌아갑니다. 다음 예제는 각 POST에서 텍스트 상자의 값을 증가시켜야합니다. 이는 발생하지 않으며 모델의 값이 증가하고 모델이 유효합니다.Modelstate가 포스트 백에서 유효한 동안 텍스트 상자가 이전 값으로 되돌아갑니다.

그러나 HttpPost Action (코드의 주석)에서 modelstate를 지우면 모든 것이 예상대로 작동합니다.

나는 뭔가를 놓친가요?

모델 :

public class MyModel 
{ 
    public int MyData { get; set; } 
} 

보기 :

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.MyModel>" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<% using (Html.BeginForm()) {%> 
    <%: Html.TextBoxFor(m => m.MyData)%> (<%: Model.MyData%>) 
        <%: Html.ValidationMessageFor(m => m.MyData) %> <br /> 
    State :<%: ViewData["State"] %> <br /> 
    <input type="submit" /> 
<% } %> 
</asp:Content> 

컨트롤러 :

여기

코드입니다

답변

8

방금 ​​온라인에 대한 답변을 찾았습니다.

트릭 당신은 사용해야 하나이이 기사

http://forums.asp.net/p/1527149/3687407.aspx

Asp.net MVC ModelState.Clear

+0

감사합니다. 나는 ModelState를 지우는 것이 효과가있을 것이라는 것을 알고 있었고, 나는 그저 유효한 모델을 위해해야만했던 이유를 알지 못했다. 첫 번째 링크는 Brad Wilson이 설계 상으로는 설명하고 모델이 유효한지 여부에 관계없이 뷰는 항상 ModelState를 사용합니다. 또한 작동하는 솔루션은 모델을 반환하지 않고 동작으로 리디렉션하는 것입니다. 다시보기 (사용 가능한 ModelState를 사용하게됩니다). –

+0

많은 감사! 나를 도와 줬어 .. 잘 했어 .. – Aaron

+0

분명히 모델 상태를 지우면 안된다. http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc- s-html-helpers-render-the-wrong-value.aspx –

2

읽어 자세한 내용을 위해 모델

[HttpPost] 
public ActionResult Index(MyModel myModel) 
{ 
    // ModelState.Clear(); 
    ViewData["State"] = "invalid"; 
    if (ModelState.IsValid) 
     ViewData["State"] = "Valid"; 

    var model = new MyModel { MyData = myModel.MyData + 1 }; 

    ModelState.Clear(); 

    return View(model); 
} 

을 반환하기 전에 ModelState을 취소하는 것입니다 Post-Redirect-Get pattern 또는 HTML 도우미를 사용하지 마십시오.

참조 : http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

기본적 MVC 소식 어떠한 재표 검증 에러가 될 것으로 예상하고, 모델 데이터 우선 재표 위해 등록한 데이터 (도면 ModelState)을 다시 사용한다. 안내는 이 아니며ModelState.Clear()이 아닙니다.

관련 문제