列挙型選択リストIDがASP.NET MVC3を使用してSQLに割り当てられていない

私の選択リストのベースは、(モデル内の)enumから来ます:

public enum week : int
{
    Every = 0,
    First = 1,
    Second = 2,
    Third = 3,
    Fourth = 4,
    Last = 5

}

public enum weekday : int
{
    Sunday = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
}

ViewBagを使用してこれらをViewに送信するには(コントローラ内の)次の関数を参照してください。

     private void PopulateDropDown(object selectedLocation = null, )
        {
            var LocationQuery = from c in db.Location orderby c.name select c;
            ViewBag.LocationSelect = new SelectList(LocationQuery, "LocationID", "name", selectedLocation);

            var statuses = from week w in Enum.GetValues(typeof(week))
                           select new { ID = (int)w, Name= w.ToString() };
            ViewBag.week = new SelectList(statuses, "ID", "Name");
            var weekdayFormat = from weekday s in Enum.GetValues(typeof(weekday))
                           select new { ID = (int)s, Name = s.ToString() };
            ViewBag.weekday = new SelectList(weekdayFormat, "ID", "Name");
        }

この例では、LocationQueryを無視することもできます(ITはどちらも機能していませんが...)

私の見解では、

@Html.DropDownList("locationID", (SelectList)ViewBag.LocationSelect, "Select a location")

そして

         @Html.DropDownList("Week", (SelectList)ViewBag.TypeSelect, "Week")
         @Html.DropDownList("weekday", (SelectList)ViewBag.TypeSelect, "Day")

しかし、私が送るデータはモデルの一部として収集されません:

public class Schedule
{

    public Schedule()
    {
        Times = new List();
    }
    public int ScheduleID { get; set; }
    public bool isDisabled { get; set; }
    [DisplayName("For Delivery")]
    public bool isDeliver { get; set; }
    public int Count { get; set; }
    public virtual ICollection Times { get; set; }
    public virtual Location Location { get; set; }
    public int Week { get; set; }
    public int weekday { get; set; }
}

レンダリングされるとき、選択リストは私が望むように見えます:

         

However, I cannot get the data of the values sent to the controller on POST. I cannot get the value of the week by doing schedule.week as expected. Am I missing a step on posting int values collected from a selectlist, polulated by an enum, そして stored as an int?

(読んでくれてありがとう)

そしてrew

0
週の週または曜日の平日(EF定義のオブジェクト型として列挙型を使用)を使用すると、データベースのテーブルは「週」と「平日」の列を削除します。
追加された 著者 Andrew,
長い間「週」という言葉を眺めていると、正しいスペルであるかどうか疑問に思うでしょう。
追加された 著者 Andrew,

2 答え

あなたのPOSTアクションは引数としてScheduleモデルを取ります:

[HttpPost]
public ActionResult Foo(Schedule model)
{
    ...
}

まず最初に最初のドロップダウンを見てみましょう:

@Html.DropDownList("locationID", (SelectList)ViewBag.LocationSelect, "Select a location")

送信されると、POSTリクエストでその値を locationID = 123 として送信します。スケジュールを見ると、 LocationID というプロパティはありませんので、値が得られないのはまったく正常です。おそらく LocationID プロパティを持つ Location プロパティがあります。だからあなたはこのようにあなたのドロップダウンを変更することができます:

@Html.DropDownList("Location.LocationID", (SelectList)ViewBag.LocationSelect, "Select a location")

今、列挙型です。私がテストしたとき、彼らはどちらも私のために働いた。ドロップダウンで選択した値に対応する Week および weekday プロパティ内のPOSTアクションで適切な整数値を取得できました。

0
追加された

私はあなたがViewBag.TypeSelectを設定する場所を見ません。

DropDownListForを使ってみましたか?

@Html.DropDownListFor(x => x.Week, (SelectList)ViewBag.week, "Week")

編集

また、あなたの意見は間違いなく厳密にタイプされていますか?それを見せてもらえますか?

0
追加された
私はこの方法を試したが、うまくいきません。
追加された 著者 clockwiseq,