0

私はこれを見ました:

ASP.NET MVC-配列をビューに渡す方法は?

そして、私のDateTime []をビューのドロップダウンリストとして展開するのに苦労していますが、これは私の行ですが、正しくありません。

<p style="color:Red"><%: Html.DropDownList("Choose a Sunday: ", (IEnumerable<SelectListItem>)ViewData["Sundays"], "--Select--")%>
</p>

コントローラーで私は持っています:

[HttpGet]
public ActionResult MyAction()
{
  DateTime[] allSundaysInMonth = GetDatesOfSundays(System.DateTime.Now);
  ViewData["Sundays"] = allSundaysInMonth;
  return View();
}

誰か助けてもらえますか?ありがとう

4

3 に答える 3

1

おそらくあなたがしたいことはこれです:

[HttpGet]
public ActionResult MyAction()
{
  IEnumerable<SelectListItem> allSundaysInMonth = GetDatesOfSundays(System.DateTime.Now).Select(day => new SelectListItem() { Text = day.ToString(), Value = day.ToString() });
  ViewData["Sundays"] = allSundaysInMonth;
  return View();
}

それはあなたの表示フォーマットに依存します。私が指摘しようとしているDateTimeSelectListItemは、暗黙のキャストがない可能性があるため、実行時に型の不一致が発生することです。

于 2012-08-03T13:37:21.610 に答える
1

ViewData/のような動的な魔法の変数ViewBagが悪であり、ビューに強く型付けされたViewModelを使用することを考えている場合は、次のようにすることができます。

ViewModelビュー(UI)に固有のものを作成します。

public class EventViewModel
{
  public IEnumerable<SelectListItem> AllSundays { set;get;}
  public string SelectedSunday { set;get;}
}

アクションメソッドで、値を設定してビューに送信します

public ActionResult MyAction()
{
  var vm=new EventViewModel();
  vm.AllSundays = GetDatesOfSundays(System.DateTime.Now).
          Select(d => new SelectListItem() {
            Text = d.ToString(), Value = d.ToString() }).ToList();

  return View(vm);
}

このようにビューを変更します

@model EventViewModel
@Html.DropDownListFor(x => x.SelectedSunday, Model.AllSundays, "--Select One--")

ViewBag/ViewDataが不良です。それはあなたのコードを醜くします。強いタイプに固執する。

于 2012-08-03T13:44:43.087 に答える
0

リストをIEnumerable<SelectListItem>にキャストしますが、それはDateTimesのリストです。リストをキャストするIEnumerable<DateTime>と修正されます。

またはSelectListItem、代わりにViewDataにリストを配置することもできます。

于 2012-08-03T13:34:45.030 に答える