5

選択した値をドットで設定するエディター テンプレートに 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.実際には自動的に選択されるはずだと思いました

すべてのドロップダウンリストに対して別のビューモデルを別のビューモデルに含めることを除いて、同じことを行ってきましたが、うまくいきました。

エディターのテンプレートとドロップダウンリストに問題はありますか?この問題に対するほとんどの回答を見てきましたが、機能する決定的な回答は見当たりません。これらの解決策を見てきました

エディター テンプレート内で選択した値を DropDownListFor にバインドする際の問題

DropDownListFor - 「選択済み」値を選択しない

4

1 に答える 1

0

で名前が付けられたプロパティがあるとItemIdしますItemViewModel

次に、ViewModel を View に送信する前に、必ず Controller で値を設定してください。

public ActionResult Edit()
{
   var viewModel = new MainViewModel
                              {
                                  ItemViewModel = new ItemViewModel{ ItemId = 7 }
                              };
   return View(viewModel);
}

さらにオプションが必要な場合は、こちらの私の回答をご覧ください

于 2012-06-18T16:34:46.557 に答える