0

次のようなビューモデルがあります。

public class SomeViewModel
{
    public SomeViewModel(IEnumerable<SelectListItem> orderTemplatesListItems)
    {
        OrderTemplateListItems = orderTemplatesListItems;
    }

    public IEnumerable<SelectListItem> OrderTemplateListItems { get; set; }
}

次に、Actionこれを行うコントローラーに次のようにします。

    public ActionResult Index()
    {   
        var items = _repository.GetTemplates();
        var selectList = items.Select(i => new SelectListItem { Text = i.Name, Value = i.Id.ToString() }).ToList();

        var viewModel = new SomeViewModel
            {
                OrderTemplateListItems = selectList
            };

        return View(viewModel);
    }

最後に私の見解:

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text"), "Please select an order template")

コードは正常に機能し、私の選択リストは素晴らしく表示されます。次に行う必要がSession["orderTemplateId"]あるのは、ユーザーがリストから特定のオプションを選択したときに設定される、選択された値を設定することです。

オンラインで調べた後、4 番目のパラメーターを使用して選択した値を設定できるはずなので、次のようにします。

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text", 56), "Please select an order template")

56 は、選択したいアイテムの ID ですが、役に立ちません。次に、コントローラーでそれをしないのはなぜだと思いましたか?

最後の試みとして、コントローラーで選択リスト項目を構築し、その項目をビューに渡してみました。

  public ActionResult Index()
  {   
      var items = _repository.GetTemplates();
      var orderTemplatesList = new List<SelectListItem>();

  foreach (var item in items)
  {
      if (Session["orderTemplateId"] != null)
      {
          if (item.Id.ToString() == Session["orderTemplateId"].ToString())
          {
              orderTemplatesList.Add(new SelectListItem { Text = item.Name, Value = item.Id.ToString(), Selected = true });
          }
          else
          {
              orderTemplatesList.Add(new SelectListItem { Text = item.Name, Value = item.Id.ToString() });
          }
      }
      else
      {
          orderTemplatesList.Add(new SelectListItem { Text = item.Name, Value = item.Id.ToString() });
      }
  }

  var viewModel = new SomeViewModel
      {
          OrderTemplateListItems = orderTemplatesList
      };

  return View(viewModel);
  }

ビューを次のように残します。

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text"), "Please select an order template")

何もない!

なぜこれがうまくいかないのですか?

4

1 に答える 1

0

「56 は選択したいアイテムの ID ですが、役に立ちません」と言います。

次のように、参照する 4 番目のパラメーターを整数ではなく文字列にする必要があります。

@Html.DropDownListFor(n => n.OrderTemplateListItems, new SelectList(Model.OrderTemplateListItems, "value", "text", "56"), "Please select an order template")
于 2013-10-25T21:51:53.043 に答える