2010-08-23 4 views
4

PetsName이라는 속성이있는 클래스가 있다고 가정 해 보겠습니다. 화면에 아무 것도 표시되지 않으면 값 공급자를 업데이트하려고합니다. 사용자가 애완 동물 이름을 입력하지 않으면 강제로 '이름이 없습니다'. 이것은 실제 시나리오가 아닙니다. 물론 이것은 샘플이기 때문에 '웹 페이지에서 기본값을 설정하는 등'은이 시나리오에 맞지 않습니다.)TryUpdateModel 이전 값 공급자 업데이트

주요 문제는 업데이트하고 싶습니다. 값은 모델을 업데이트 할 때 오버라이드 한 것을 사용합니다. 한 가지 생각은 값을 제거하고 추가하는 것입니다. ModelState를 확인할 때 업데이트 된 값이 있지만 TryUpdateModel을 호출하면 값이 업데이트되지 않습니다. Im이 아래에서하고있는 일이 참으로 정확하고 여기에 또 다른 문제가 있습니다. 그러나 나는 이것을 먼저 시도 할 것이라고 생각했습니다. 감사! 무대 뒤에서

//Sample case: 

    [HttpPost] 
    public ActionResult Edit(PetOwner petOwner) 
    { 

    //If pets name is not set, force to "Unknown" 
    if(petOwner.PetsName=="") 
    { 
    //Tried this too ModelState.Remove("PetsName"); 
    //ModelState.Add("PetsName", new ModelState()); 
    ModelState["PetsName"].Value = new ValueProviderResult("Unnamed", "Unnamed", CultureInfo.CurrentCulture); 
    } 

    //Get the record/relationships from DB to merge with ModelState 
    PetOwner petOwnerToSave = from o in ctx.PetOwners where o.PetOwnerId == petOwner.PetOwnerId select o; 

    TryUpdateModel(petOwnerToSave); 

    //Save petOwnerToSave 
    } 

답변

4

진짜 문제는 여기 Html.HiddenFor가 TryUpdateModel 뷰에 제공하는 모델의 값을 업데이트 한 경우에도 올바른 값을 표시하지 않은 것입니다.

여기에서 문제는 게시물 다음에 뷰를 렌더링하는 경우 오류가 발생했다고 가정합니다 (그렇지 않으면 GET 메서드로보기로 다시 리디렉션됩니다. 따라서 Post Redirect Get 문제)

이에 자세히 설명되어 있습니다 : http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

+0

그리고 후 리디렉션이-받기 ModelState.Clear()'를 사용하여 헬퍼의 가정을 당신이 우회 의미 "세부 사항"에 의해;'. 그 링크에 대해 정말 고마워, 아약스 게시 이후에 오류가 발생하는 이유를 파악하는 데 문제가있었습니다. 다른 조언 (here : http://stackoverflow.com/a/5906396/1026459)은 부분 뷰에서 유효성 검사 마크 업을 올바르게 얻는 방법을 보여주는 점에서 실제로 이것과 잘 어울립니다. @ {if (ViewContext.FormContext == null) {ViewContext.FormContext = 새 FormContext();}'. 감사! :) –

관련 문제