我使用的是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机制神奇地发布的,并且抱怨说所有其他列表都没有填充,因为有些奇怪的幽灵。