2014-03-27 1 views
0

저는 현재 ASP.NET MVC에서 작업 중이며 내가 이해하지 못하는 viewModels에서 뭔가를 발견했습니다.ViewModel 속성 변경은 효과가 없습니다

내가 하나의 속성 간단한 뷰 모델이 있습니다 :

public class Testmodel 
{ 
    public int Test { get; set; } 
    public Testmodel() 
    { 
     Test = 0; 
    } 
} 

을 나는 이렇게 내 컨트롤러의 속성을 변경하려면 : 나는 이런 경우, 아주 간단한 예를 woked

[HttpPost] 
    public ActionResult Index(Models.ViewModels.Testmodel model) 
    { 
     model.Test += 1; 
     return View(model); 
    } 

내보기에서 변경 사항은 데이터 바인딩을 사용할 때가 아니라 속성에 직접 액세스 할 때만 표시됩니다. 뷰는 다음과 같습니다

내가 직접 Model.Test 속성에 액세스 텍스트 파트에서는 ​​
@model hobble.Models.ViewModels.Testmodell 
@{ 
    ViewBag.Title = "Startseite"; 
} 
@using (Html.BeginForm()) { 
<p>It is @Model.Test</p> 

<div> 
    @Html.EditorFor(model => model.Test) 
    </div> 
    <input type="submit" value="Test" /> 
} 

, 나는 업데이트를 얻을 수 있지만, 편집기 필드에, 나는하지 않습니다. 제출 버튼을 클릭 할 때마다 테스트 속성이 1 씩 증가하지만 그럴 수는 없다고 생각합니다. 누군가 나에 대해 설명해 줄 수 있습니까?

답변

1

MVC에서 POST의 개체를 반환 할 때마다 컨트롤러의 모델 값으로 양식을 채우는 대신 유효성 검사 오류가 있었으므로이를 수행 중이라고 가정하기 때문에 이러한 상황이 발생합니다. MVC는 잡아 내고 있습니다. ModelState의 값

빠른 "솔루션"은 ModelState.Clear()을 사용하는 것이지만 기본적으로 MVC 기본 제공 기능을 무시하기 때문에 권장하지 않습니다.

이미 알고 있듯이 Html 도우미를 사용하지 않거나 Post-Redirect-Get 패턴을 사용하십시오. ModelState.Clear()를 사용

, 당신은 "할 -하지 - 사용 -이 - 해결 방법"경고를 무시하려는 경우를 대비 :

public ActionResult Index(Testmodel model) 
{ 
    model.Test++; 
    ModelState.Clear(); 
    return View(model); 
} 
+0

아 좋아, 감사합니다. 내가 "올바른"방법을 사용하려고합니다. 처음에는 매우 혼란 스럽습니다. D – PeterO