2011-11-25 3 views
1

드롭 다운 값 문제와 관련된 많은 게시물을 읽었지만 내 문제는 반대입니다.MVC3 DropDownListFor 게시 된 작업에서 선택된 값이 변경되지 않습니다.

단추가 컨트롤러 동작을 통해 페이지를 제출 한 후보기가 반환 된 후에 항상 드롭 다운을 재설정하고 싶습니다. 그래서 어떻게 구조화 되었는가? 매번 드롭 다운 목록을 재설정 할 수 있습니까? 나는 그것을 할 길을 찾을 수 없으며 나는 많은 방법을 시도했다. 나를 믿어 라.

내보기 :

@Model.PspSourceModel.PayAccount.PaymentProviderId 
<br /> 
@Html.DropDownListFor(
     x => x.PspSourceModel.PayAccount.PaymentProviderId, 
      new SelectList(Model.PspSourceModel.PaymentProviders, "Value", "Text", "-- please select --"), 
    "-- please select --" 

내 컨트롤러 :

// I've tried forcing the selected value id here - doesn't effect the dropdownlist still? 
pspVM.PspSourceModel.PayAccount.PaymentProviderId = 1; 

return (View(pspVM)); 

내 웹 페이지를 보여줍니다 : SO에 대한 질문과 답변에서

1 (the id I set in the Action) 

dropdownlist with the id=6 or whatever value was chosen prior to submitting the form. 

과 나는 DropDownList로 생각보다 넓은 웹 당신이 선택한 id에 묶여있는 것 같지만, 어떻게하면 각 tim을 '선택하십시오'로 드롭 다운을 재설정 할 수 있습니까? 이자형?

미리 감사드립니다.

+0

더 좋은 제안이 있습니까? // 내가 처음 한 다음 비 존재하지 않는 아이디 (-1)는 '선택하십시오' 내 컨트롤러를 기본값으로 설정을 취소하는 경우 : 는' ModelState.Clear을 code'(); pspVM.PspSourceModel.PayAccount.PaymentProviderId = -1; return (보기 (pspVM)); 'code' 아무튼 고마워요. – BarryFanta

답변

0

포스트 백에 대한 작업에서 필요에 따라 현재 값을 처리하고 모델에서 ID를 설정하고 뷰를 호출 할 수 있습니다.

[HttpPost] 
public ActionResult Index(ModelClass viewModel) 
{ 
    // Process Value 

    viewModel.PspSourceModel.PayAccount.PaymentProviderId = 6; 
    return View("Index", viewModel); 
} 

또는 HttpGet에서 기본값을 설정하고 게시물에서 RedirectToAction 결과를 호출 할 수 있습니다.

[HttpGet] 
public ActionResult Index() 
{ 
    // Set the default values; the following is a rough example, and won't work. 
    var viewModel = new ModelClass 
    { 
    PspSourceModel.PayAccount.PaymentProviderId = 6 
    } 

    return View("Index", viewModel); 
} 

[HttpPost] 
public ActionResult Index(ModelClass viewModel) 
{ 
    // Process Value 

    return RedirectToAction("Index"); 
} 

추가 정보가 필요하면 알려 주시기 바랍니다. 여기

매트

+0

감사합니다. Matt, 귀하의 HTTPost 제안은 제가 한 일이었습니다. 어떻게 든 거기에 ID를 설정해도 내 문제는 해결되지 않습니다. 리디렉션 솔루션을 수행 할 수 없습니다. 다른 제품에 문제가있어 논리가 지저분 해지는 것을 피하십시오. 초기 의견에 따르면 ** ModelState ** 문제로 보입니다. 감사합니다. – BarryFanta

4

근본적인 문제는 MVC는 포스트 백에있는 양식을 리 바인드 할 때 당신이 원하는대로 당신이만큼 모델을 변경할 수 있지만 바운드 ModelState이 될 수 있도록, 그것은, 모델하지만 ModelState를 사용하지 않는 것입니다 익숙한. ModelState에서 이러한 방법 중 하나를 시도해 보셨습니까?

public bool Remove(string key); 
public void SetModelValue(string key, ValueProviderResult value); 
관련 문제