私はasp.netmvc2を使用していますが、理解できないこの動作を見つけました。
私は次の見解を持っています:
<% 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がnullであることがわかりました。しかし、postedModel.areaListは問題ありません!これは、SelectListを1つしか投稿できないということですか、それとも何かが足りないということですか?誰か助けてくれませんか?
PSプロパティ「selectedArea」、「selectedDistrict」、「selectedTown」は期待どおりに投稿されます。
編集。皆さんのおかげで、私はいくつかの重要なことを逃しました、そしてあなたは私にそれらに指示を与えました。
私の問題はareaListのようでした。デフォルトのコンストラクターで埋められました。それを忘れたので、postedModel.areaListがいっぱいになっているのを見て、asp.net mvcメカニズムによって魔法のように投稿されたと思い、奇妙なグリスが原因で他のすべてのリストがいっぱいになっていないと不平を言いました。