2012-12-03 29 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)当我选择区域后,点击“发布”按钮后,我看到所有区域的列表,他们从外部源加载,这部分工作正常。

所以我从列表中选择分区,然后点击“发布”。在我看到选定地区的所有城镇名单后,但districtList消失。然后我在我的控制器中追踪它,我发现属性postingModel.districtList为null。但是,postedModel.areaList很好!这是否意味着我只能发布一个SelectList,或者我错过了什么?有人可以给我任何帮助吗?
P.S.按预期发布属性“selectedArea”,“selectedDistrict”,“selectedTown”。

编辑。感谢大家,我错过了一些重要的事情,并且你给了我指引。
我的问题似乎是areaList。它由默认构造函数填充。我忘记了这一点,然后我看到了postedModel.areaList填充,我认为它是由asp.net mvc机制神奇地发布的,并且抱怨说所有其他列表都没有填充,因为有些奇怪的幽灵。

回答

1

您必须在每个请求的模型中重新填充您的列表属性。 不会自动回传。只需将选定的值回发并绑定到模型中的属性(即selectedArea已绑定,但不是areaList)。

1

该列表不应该发布,只有在您的html表单中选择元素的值将。如果您需要保持列表值,您可以尝试将它们放入TempData中GET for Index中,以便将它们保留用于下一个请求。

相关问题