2013-02-28 2 views
3

나는 ASP.net MVC 프로젝트에 일하고 난 그렇게처럼 내 모델의 boolean에 대한 값을 제공하기 위해 CheckBoxFor 도우미 방법을 사용하고 있습니다 :ASP.net MVC 확인란은 문제

@Html.CheckBoxFor(m => m.ShouldSaveSearch, new { id="ShouldSaveSearch"}) 

확인란을하면 은 사용자가을 확인하면 컨트롤러가 모델을 수신 할 때 완전히 작동합니다. ShouldSaveSearch 속성은 true로 설정됩니다.

[HttpGet] 
public ActionResult Search(int studentSearchId = -1) 
{ 
    return View(new StudentSearchModel(studentSearchId)); 
} 

[HttpPost] 
public ActionResult Search(StudentSearchModel m) 
{ 
    ViewBag.SearchResults = Hub.Web.Models.Student.StudentSearchModel.Search(m); 
    Hub.Web.Models.Student.StudentSearchModel.Save(m); 
    m.ShouldSaveSearch = false; 
    m.ShouldShareSearch = false; 
    m.SavedSearchName = ""; 
    m.SavedSearchDescription = ""; 

    return View(m); 
} 

나는 다음 falseShouldSaveSearch 속성을 설정 한 후 원래 제출했던 것과 동일한 모델과 동일한 뷰를 돌려줍니다.

그러나보기가 렌더링되면이 속성의 확인란이 선택된 상태로 유지됩니다. 체크 박스가 선택을 취소하는 것을 막고있는 뭔가 빠졌습니까?

+1

양식을 재설정 한 다음보기를 다시 표시하는 것처럼 보입니다. RedirectToAction ("Search")'<- POST 대신보기에 대한 GET 요청을 목표로합니다. –

+1

id = "ShouldSaveSearch"가 필요하지 않습니다 - 그 mvc 자체에 의해 생성됩니다. 둘째, [HttpPost] 속성은 어디에 있습니까? – codingbiz

답변

1

IT는 ModelStatequestion에서 논의 된 문제와 Html 헬퍼는 ModelModelState 값을하지 표시하는 몇 가지 단어도 here

처럼 들린다. 자세한 내용은 질문을 참조하십시오.

가능한 옵션 :

  • 이 (가) 후 리디렉션-얻을 ModelState 컬렉션을 사용 확인란 값을 다시 설정 마흔 두
  • 에 의해 제안 ModelState["ShouldSaveSearch"].Value = false
+0

그러나 이것은 실제로 내 문제였습니다. 그러나 ModelState를 지우면 다른 값이 제거되어 ModelState [ "ShouldSaveSearch"]. Value = false' 솔루션이 오류를 반환합니다. "암시 적으로 변환 할 수 없습니다 'bool'을 'System.Web.Mvc'로 입력하십시오.ValueProviderResult ' ". – bjonnn

+0

'ModelState ["ShouldSaveSearch "]에 의해 하나의 값을 제거 할 수있었습니다. 값 = 새 ValueProviderResult (" ", CultureInfo.CurrentCulture);'. – bjonnn

+0

오, 잘 됐네요. 그게 다행 이었니? – Ulises

1

처럼 뭔가를 패턴을 당신은 보이지 구현 확인란을 선택하지 않으려면 기본값을 사용합니다. 즉 람다의 참/거짓 값 만

@Html.CheckBoxFor(m => m.ShouldSaveSearch, new { @checked="false"}) 

의 다른 점은 똑같이 중요 checked 속성의 값에 연결 하지입니다. ModelState를 지우십시오!

1

여기서 문제는 모델 데이터를 사용하여 게시 한 뷰와 동일한 뷰를 반환하면 MVC는 오류로 인해 반환한다고 생각할 수 있다는 것입니다. 이는 정상적인 동작입니다. 뷰를 다시 표시하려면 PRG 패턴 (Post-Redirect-Get)을 구현해야합니다. ModelState.IsValid이 true 또는 false인지 여부에 관계없이 문제가 항상 발생합니다. 뷰의 HttpGet 버전으로 리디렉션하고 매개 변수를 전달하고 데이터를로드해야합니다. 로딩을 피하려면 TempData 또는 다른 세션 구현에 데이터를 저장하십시오.

업데이트 : 모델 개체를받는 작업 버전을 호출하고 있습니다. 데이터 통화를 유지하면

return RedirectToAction("Search", new {studentSearchId = your_value});