我正在使用 asp.net mvc 2,我发现了我无法理解的这种行为。
我有以下观点:
<% 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);
}
}
想法是然后我加载页面,我看到所有可能区域的列表。(我看到了 - 这是我的第一个下拉列表)当我选择区域时,单击“发布”按钮后,我看到所有区域的列表,它们从外部加载来源,这部分工作正常。
所以我从列表中选择地区,然后单击“发布”。之后我看到位于选定地区的所有城镇的列表,但 DistrictList 消失了。然后我在我的控制器中跟踪它,我发现属性postedModel.districtList 为空。但是postedModel.areaList 没问题!这是否意味着我只能发布一个 SelectList,或者我错过了什么?有人可以给我任何帮助吗?
PS属性“selectedArea”、“selectedDistrict”、“selectedTown”按预期发布。
编辑。感谢大家,我错过了一些重要的事情,你们给了我方向。
我的问题似乎是 areaList。它由默认构造函数填充。我忘记了这一点,所以后来我看到了postedModel.areaList 填充,我认为它是由asp.net mvc 机制神奇地发布的,并抱怨由于一些奇怪的问题而没有填充所有其他列表。