2012-12-03 4 views
0

asp.net mvc 2를 사용하고 있는데 이해할 수없는이 동작을 발견했습니다.
내가 다음보기가이 같은asp.net mvc에 두 개 이상의 목록 게시

<% using (Html.BeginForm("Index", "BlackListGrabber", FormMethod.Post)) 
    {   
<%= Html.DropDownListFor(m => m.selectedArea, new SelectList(Model.areaList, "value", "text")) %> 

<% if (Model.districtList != null) { %> 
<%= Html.DropDownListFor(m => m.selectedDistrict, new SelectList(Model.districtList, "value", "text")) %> 
<% } %> 

<% if (Model.townList!= null) { %> 
<%= Html.DropDownListFor(m => m.selectedTown, new SelectList(Model.townList, "value", "text")) %> 
<% } %> 

<input type="submit" value="post" /> 
<% } %> 

와 컨트롤러의 방법

[HttpPost] 
public ActionResult Index(BlackListGrabberModel postedModel) 
{ 
    BlackListGrabberModel model = new BlackListGrabberModel(postedModel);    
    return View(model); 
} 

는 그리고, 적어도 마지막하지만, 내 모델 :

BlackListGrabberModel(BlackListGrabberModel model) 
{ 
    if (string.IsNullOrEmpty(model.selectedArea)) 
    { 
     areaList = GetRegions(); 
    } 
    else if (string.IsNullOrEmpty(model.selectedDistrict)) 
    { 
     areaList = model.areaList; 
     districtList = GetRegions(model.selectedArea); 
    } 
    else if (string.IsNullOrEmpty(model.selectedTown)) 
    { 
     areaList = model.areaList; 
     districtList = model.districList; 
     districtList = GetRegions(model.selectedDistrict); 
    } 
} 

아이디어는 내가로드이다 페이지, 나는 모든 가능한 지역의 목록을 본다. (그리고 나는 그것을 본다 - 나의 첫번째 dropdownlistfor이다.) 내가 "post"버튼을 클릭 한 후에 지역을 선택하면, 나는 모든 지구 목록을보고, 부품이 잘 작동합니다.

그래서 목록에서 지구를 선택하고 "게시"를 클릭하십시오. thar 후에 선택된 지구에있는 모든 마을의 목록을 볼 수 있지만 districtList가 사라집니다. 그런 다음 내 컨트롤러에서 추적했는데 postsModel.districtList 속성이 null이라는 것을 알았습니다. 그러나 postedModel.areaList는 좋습니다! 그게 하나의 SelectList를 게시 할 수 있다는 뜻입니까, 아니면 뭔가 빠졌는가요? 누군가 제게 어떤 도움을 주실 수 있습니까?
P. 속성 "selectedArea", "selectedDistrict", "selectedTown"이 예상대로 게시됩니다.

EDIT. 모두 덕분에, 나는 중요한 것들을 놓쳤고, 당신은 그들에게 나에게 지시를주었습니다.
내 문제가 areaList 인 것으로 보입니다. 기본 생성자로 채워졌습니다. 나는 그걸 잊었다. 그래서 내가 본 것을 보았다 .Model.areaList가 가득 찼다. 나는 그것이 asp.net MVC 메커니즘에 의해 마술로 게시되었다고 생각하고, 다른리스트는 이상한 glithces 때문에 채워지지 않는다고 불평했다.

답변

1

모든 요청에 ​​대해 모델의 목록 속성을 다시 채워야합니다. 자동으로 다시 게시되지 않습니다. 선택한 값만 게시되어 모델의 속성에 바인딩됩니다 (예 : selectedArea은 바운드되었지만 areaList이 아님).

1

목록을 게시해서는 안되며 html 양식의 select 요소 값만이 게시됩니다. 목록 값을 유지해야하는 경우 Index에 대한 TempData에 배치하여 다음 요청에 대해 유지할 수 있습니다.

관련 문제