2012-10-21 3 views
1

컨트롤러가 1로 설정하는 Model 속성이 있지만 내보기에서 액세스하는 방법에 따라 0과 1로 표시됩니다.MVC4 뷰 모델 int 속성은 1이지만 HTML은 0으로 렌더링됩니까?

보기 조각은 (이 라인이 너무 절대적으로 연속입니다!)

@Html.DisplayFor(model => model.resumeStage)  
@Html.HiddenFor(model => model.resumeStage) 
@Html.EditorFor(model => model.resumeStage) 

렌더링 된 HTML

1 
<input value="0" data-val="true" data-val-number="The field resumeStage must be a number." data-val-required="The resumeStage field is required." id="resumeStage" name="resumeStage" type="hidden" /> 
<input value="0" class="text-box single-line" id="resumeStage" name="resumeStage" type="number" /> 

해서는 안 값 (I 가독성에 대한 태그의 전면에 value= 이동) 항상 1일까요? 나는 그것을 텍스트 상자 안에 넣을 때 그 속성의 상태를 잃어 버리는 것처럼 보인다! 뷰 - 제어기 강한

public class CreateUserModel 
{ 
    [Required] 
    public int resumeStage { get; set; } // <== problem 

    public LocalProfile newLocalUser { get; set; } 
    public ExtProfile newExtUser { get; set; } 

    public CreateUserModel() 
    { 
     resumeStage = 0; 
     newLocalUser = new LocalProfile(); 
     newExtUser = new ExtProfile(); 
     preFillWithTestData(); 
    } 

    private void preFillWithTestData() 
    { 
     // prefill the newLocalUser 
     // and newExtUser classes with dummy data 
    } 
} 

(I 0 => (1)로부터 INT 플립) 폼 POST를 수신하는 제어기 수단으로 정의 된 모델 클래스에 의해 구속되는 것은 :

[HttpPost] 
public ActionResult UserRegistration(CreateUserModel newUser) 
{ 
    try 
    { 
     //stage 0, setup local account 
     if (newUser.resumeStage <= 0) 
     { 
      // do stuff 
      newUser.resumeStage = 1; 
     } 

     // stage 1, setup external account 
     if (newUser.resumeStage <= 1) 
     { 
      // test an exception 
      Exception ex = new Exception("TEST: External service provider offline"); 
      throw ex; 
      newUser.resumeStage = 2; 
     } 

     return RedirectToAction("Index"); 
    } 
    catch (Exception ex) 
    { 
     return View(newUser); // newUser.resumeStage is 1 here but 
           // view will disagree 
    } 
} 

양식을 작성하고 제시 컨트롤러 방법은 다음과 같습니다

public ActionResult UserRegistration() 
{ 
    // Constructor prefills with test data, nothing more to do 
    CreateUserModel newUser = new CreateUserModel(); 

    return View(newUser); 
} 

질문 : 나는 resumeStage가로 표시 갖고있는 것 같다 수없는 이유 사람이 알고 있나요 1 HTML 렌더링 된 텍스트 상자 안에?

답변

1

당신은 ModelState.Remove("resumeStage");를 추가하거나 호기심 ModelState.Clear();

catch (Exception ex) 
{ 
    ModelState.Remove("resumeStage"); 
    return View(newUser); // newUser.resumeStage is 1 here but 
          // view will disagree 
} 
+0

에 대한 호출을 추가해야합니다. 왜 그게 필요한가요? 임의의 해결 방법처럼 보입니다 ... – DeepSpace101

+1

http://stackoverflow.com/questions/1775170/asp-net-mvc-modelstate-clear에서 이유를 찾았습니다 ... 아주 이상한 MVC 동작입니다! – DeepSpace101