1

私は見解を持っています。ビューのi'vemonthsフィールド(データベースのnvarcharタイプ):

         @Html.DropDownListFor(model => model.rent_month,               
         (IEnumerable<SelectListItem>)ViewBag.months)

モデルクラス(PostManager)に、次のような月のリストを生成するメソッドがあります。

          public IEnumerable<SelectListItem> GetMyMonthList()
         {
           return CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
            .Select(m => new SelectListItem() { Text = m, Value = m });
         }

私は行動を起こすのに何ヶ月もかかります:

     public ActionResult Create()
    {
       PostModel p = new PostModel();

     ViewBag.months = pm.GetMyMonthList();
       return View(p);
     }

私のモデルでは、私の月の属性:

    [Required(ErrorMessage = "You Must Select a Month.")]
    [Display(Name = "Select Rent Month")]
    public string rent_month { get; set; }

ポストアクションで:

      public ActionResult Create(PostModel p)
       {
         if (ModelState.IsValid)
            {
             post post = new Models.DB.post();
                 post.rent_month = p.rent_month;  
               db.posts.AddObject(post);
                    db.SaveChanges();
            }
        }     

ドロップダウンリストに月が正しく生成されますが、フォームを送信するとエラーが発生します:

キー「rent_month」を持つViewDataアイテムのタイプは「System.String」ですが、タイプは「IEnumerable」である必要があります。

さて、このエラーの解決策は何ですか...事前に感謝します...

4

2 に答える 2

0

投稿アクションで ViewBag に再度データを入力していないため、これが発生していると思います。ViewBag.months = pm.GetMyMonthList();コントローラーの POST アクションで、GET アクションで行ったのと同じように設定してください。

より良い解決策はIEnumerable<SelectListItem> MonthList、PostModel の一部としてプロパティを持つことです。ViewBag から月をロードする代わりに、MonthList プロパティによって直接アクセスできます。

ポストモデルで

    public IEnumerable<SelectListItem> MonthList
    {
        get
        {
            return pm
                .GetMonthList()
                .Select(a => new SelectListItem
                {
                    Value = a.Id,
                    Text = a.MonthText
                })
                .ToList();
        }
    }

次に、ビューで

@Html.DropDownListFor(model => model.rent_month, Model.MonthList)

質問への編集後

PostModel クラスは次のようになります。GetMyMonthList() の実装を PostManager クラスから移動しました。

    public class PostModel
    {
        [Required(ErrorMessage = "You Must Select a Month.")]
        [Display(Name = "Select Rent Month")]
        public string rent_month { get; set; }

        public IEnumerable<SelectListItem> MonthList
        {
            get
            {
                return CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
                 .Select(m => new SelectListItem() { Text = m, Value = m });
            }
        }
    }
于 2012-05-07T04:56:17.153 に答える