選択した値をドットで設定するエディター テンプレートに Html.DropDownListFor があります。 エディター テンプレートを部分ビュー (エディター テンプレートの HTML を部分ビューにコピー ペースト) に置き換えると、機能します。
サンプルコード
モデル:
public class MainItemViewModel
{
public int MainItemId { get; set; }
public ItemViewModel ItemViewModel { get; set; }
}
public class ItemViewModel
{
public int ItemId { get; set; }
public string Text { get; set; }
public IEnumerable<SelectListItem> ItemSelectList { get; set; }
}
コントローラ:
public class DropDownController : Controller
{
//
// GET: /DropDown/
public ActionResult Index()
{
var mainItemViewmodel = new MainItemViewModel();
mainItemViewmodel.MainItemId = 2;
mainItemViewmodel.ItemViewModel = new ItemViewModel();
mainItemViewmodel.ItemViewModel.ItemId = 2;
mainItemViewmodel.ItemViewModel.Text = "bla5";
List<SelectListItem> someItems = new List<SelectListItem>(){new SelectListItem(){Value = "1",Text = "Test1"},new SelectListItem(){Value = "2",Text = "Test2"}};
mainItemViewmodel.ItemViewModel.ItemSelectList = someItems;
return View(mainItemViewmodel);
}
[HttpPost]
public ActionResult Index(MainItemViewModel mainItemViewModel)
{
return RedirectToAction("Index");
}
}
DropDown\Index.chtml
@model MainItemViewModel
@using (Html.BeginForm())
{
<br/>
@Html.TextBoxFor(model => model.MainItemId)
<br/>
@Html.EditorFor(model => model.ItemViewModel)
<input name="submit" type="submit" value="submit"/>
}
DropDown\EditorTemplates\ItemViewModel.chtml
@model ItemViewModel
@{
@Html.DropDownListFor(model => model.ItemId, Model.ItemSelectList, "Select Item");
<br/>
@Html.TextBoxFor(model => model.Text);
}
DropDownListFor(model => model.ItemId, Model.ItemSelectList, "アイテムを選択"); 2.実際には自動的に選択されるはずだと思いました
すべてのドロップダウンリストに対して別のビューモデルを別のビューモデルに含めることを除いて、同じことを行ってきましたが、うまくいきました。
エディターのテンプレートとドロップダウンリストに問題はありますか?この問題に対するほとんどの回答を見てきましたが、機能する決定的な回答は見当たりません。これらの解決策を見てきました