2012-05-06 16 views
1

私はビューを持っています。asp.netのドロップダウンリスト

  @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 }); 
     } 

ビューでは、私は(データベースでnvarchar型)ヶ月のフィールドをしましたよるgetアクションに:私のモデルで

 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; } 
キー「rent_month」があり

のViewData項目は次のとおりです。それは後にフォームを送信し、それがエラーを与えるのDropDownList correctly.But月発生

 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(); 
      } 
     }  

:ポストアクションで

「IEnumerableを」タイプ「可能System.String」がなく、型でなければならないこのエラーの解決策...事前のおかげである今何

...

+0

モデルとコントローラをご提示ください。 –

+0

フォームに送信したアクションをコントローラに表示してください。 –

+0

あなたはCreateアクション全体ですか?意見を返すアクションの部分を示してください。 – DMulligan

答えて

0

私はこれが起こっていると思うのですが、あなたのポストアクションではあなたはViewBagに再度ポピュレートしていないからです。コントローラのPOSTアクションにGETアクションで行ったのと同様のViewBag.months = pm.GetMyMonthList();を設定してください。

ポストモデルの一部としてIEnumerable<SelectListItem> MonthListプロパティを持つ方がよいでしょう。代わりにViewBagから数ヶ月をロードするあなたは質問

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

EDIT後ビューで

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

その後PostModelで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 }); 
      } 
     } 
    } 
+0

投稿リストをpostmodelの属性として追加しました。ビュー内にビューコードを追加しました。ビューページにエラーが表示されます。エラーコード:CS1928 –

+0

私のパブリックIEnumerable MonthListの実装は単なる例です。これはメソッド属性ではないプロパティです。実装に応じて変更する必要があります。私の編集された答えを参照してください –

+0

これは今、おかげで... –

0
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 }); 
      } 
     } 
    } 
関連する問題