2013-12-11 2 views
1

I를 MVC 뷰에서 다음 텍스트 상자가 null로 작동 안됨. 나는 항상 마지막 값을 본다.설정 Html.TextBox 값은

그리고 이것은 내 컨트롤러 :

[Route("signup"), HttpGet] 
public virtual ActionResult SignUp() { 

    UserSignUpModel model = new UserSignUpModel(); 
    model.Captcha = String.Empty; 
    model.Email = ""; 
    return View(model); 

} // SignUp 

[Route("signup"), HttpPost, ValidateAntiForgeryToken] 
public virtual ActionResult SignUp(UserSignUpModel model) { 

    if (ModelState.IsValid) { 

    // Create account code 
    return View(MVC.Shared.Views._Note, new NoteModel("Account created")); 

    } else { 

    model.Captcha = String.Empty; 
    model.Email = ""; 

    return View(Views.SignUp, model); 

    } 

} 

는 감사, 수동으로이 매개 변수를 설정 컨트롤러에 액션 메소드에서 미구엘

+0

UserSignUpModel도 붙여 넣을 수 있습니까? – solidau

답변

0

:

// ... 
model.Captcha = String.Empty; 
return View(model); 

그리고 추가하는 것이 좋습니다 자동 완성 = captcha 필드에 대한 html 속성 해제 :

@Html.TextBoxFor(x => x.Captcha, new { autocomplete = "off" }) 
+0

나는 두 가지 제안을 추가했는데 행운이 아니라 ... 아주 이상하다. 내가 model.Captcha = String.Empty; 아직도 나타납니다 ... 어떤 생각? –

+0

방금 ​​컨트롤러 코드로 게시물을 업데이트했습니다 ... 또한 ""로 이메일을 설정하려했는데 동일한 결과가있었습니다. –

+0

With HttpContext.Request.Params [ "Captcha"] = ""System.NotSupportedException 유형의 예외가 System.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다. 추가 정보 : 컬렉션은 읽기 전용입니다. –

1

양식이 오류와 함께 제출 된 경우 오류가있는보기를 반환하기 전에 ViewData를 지우고 컨트롤러에서 속성을 명시 적으로 지울 수 있습니다.

[HttpPost] 
public ActionResult MyController(Model myModel) 
{ 
    if (!ModelState.IsValid) 
    { 
     myModel.Captcha = String.Empty; 

     ViewData = null; 

     return View(myModel); 
    } 

    return View(myModel); 
} 
+0

예! 그것은 ViewData 때문입니다! Asp.Net은 개발자로부터 너무 많이 숨겨져 때때로 때로는 혼란 스럽습니다 –

+0

당신의 제안을 할 수 없습니다 ... ViewData = null을 사용했을 때 Captcha를 만들 수 있었지만 ViewBag에 있던 데이터는 삭제되었습니다 . 다른 옵션은 없습니까? –

1

이 문제를 해결할 수있었습니다. 올바른 방법은 모델 상태를 사용하는 것입니다.

ModelState [ "Captcha"]. 값 = 새 ValueProviderResult ("", Thread.CurrentThread.CurrentCulture);

이렇게하면 ViewData에서 다른 데이터를 지울 필요가 없습니다.

ModelState를 변경하고 제거하지 않으면 해당 속성과 관련된 오류를 계속 표시 할 수 있습니다.