2016-03-07 53 views
0

你好我的應用程序的值我有一個下拉列表店從下拉列表數據庫MVC 5

在我的控制器我用這個

public ActionResult Create() 
    { 

     webdata db = new webdata(); 
     ViewBag.annCategories = new SelectList(db.annCategories, "kind", "an_kindtext"); 
     return View(); 

    } 

編輯 在我HttpPost我有

[HttpPost] 
    [ValidateAntiForgeryToken] 

    public ActionResult Create([Bind(Include = "ann_ID,Pubdate,kind,title")] announcements announcements) 
    { 
     if (ModelState.IsValid) 
     { 
      db.announcements.Add(announcements); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(announcements); 
    } 

在我看來,我有這個

@Html.DropDownList("annCategories",null, new { id = "annCategories" }) 

我看到我的下拉列表中的值,當我點擊創建按鈕時,新記錄存儲在數據庫中。但它總是保存「選擇一個類別」,這是第一個選項。有人可以幫忙嗎? 謝謝

編輯

我宣佈模型

public class announcements 
{ 
    [Key] 
    [Display(Name = "ID")] 
    public int ann_ID { get; set; } 


    [Display(Name = "Date")] 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] 
    public DateTime Pubdate { get; set; } 

    [Display(Name = "Category")] 
    public int kind { get; set; } 


    [Display(Name = "title")] 
    public String title { get; set; } 

    } 

我的公告分類模型

public class annCategories 
{ 

    [Key] 
    [Display(Name = "Category")] 
    public int kind { get; set; } 


    [Display(Name = "Description")] 
    public String an_kindtext { get; set; } 

}

+0

是否與數據庫記錄「選擇一個類別」保存在類別表?如果是這樣的話,想象一下,這是非常有效的,因爲如果沒有選擇類別,DropDown值將是「選擇類別」選項的Id – Ian

+0

是的,存在具有「選擇類別」但保存到所有類別的記錄記錄任何我選擇 – touinta

回答

1

這不是保存"Select a category"。它將保存模型的默認值,因爲您從不將任何東西綁定到屬性kind,因此當您提交表單時,kind的值爲0

開始通過創建一個view model以表示要在視圖中顯示的內容

public class AnouncementVM 
{ 
    public int? ID{ get; set; } 
    [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}"] // see notes below 
    public DateTime Date { get; set; } 
    public int Category { get; set; } 
    public string Title{ get; set; } 
    public IEnumerable<SelectListItem> CategoryList { get; set; } 
} 

注意[DataType(DataType.Date)]增加,以使瀏覽器日期選擇器的type="date"屬性(這是隻有在Chrome中實現,邊緣),所以除非你使用它,那麼它可以被刪除,但如果你正在使用它,那麼你還必須使用[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)](即格式必須是yyyy-MM-dd

然後在t他GET方法

public ActionResult Create() 
{ 
    var model = new AnouncementVM 
    { 
     CategoryList = new SelectList(db.annCategories, "kind", "an_kindtext") 
    }; 
    return View(model) 
} 

,並在視圖

@Html.DropDownListFor(m => m.Category, Model.CategoryList, "Please select") 

,並在POST方法

[HttpPost] 
public ActionResult Create(AnouncementVM model) 
{ 
    if (!ModelState.IsValid) 
    { 
     model.CategoryList = new SelectList(db.annCategories, "kind", "an_kindtext"); 
     return View(model); 
    } 
    announcements data = new announcements 
    { 
     Pubdate = model.Date, 
     kind = model.Category, 
     title = model.Title 
    }; 
    db.announcements.Add(data); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 
+0

感謝您的回覆,我收到錯誤:不能隱式轉換類型'System.Web.Mvc.SelectList'到'System.Collections.Generic.IEnumerable 」。存在明確的轉換(你是否缺少演員?)我搜索它,但我沒有找到解決方案。錯誤出現在控制器的行:CategoryList = new SelectList(db.annCategories,「kind」,「an_kindtext」) – touinta

+0

這是因爲你有'using'語句錯誤。它需要是'System.Web.Mvc.SelectList'(如果你需要在你的程序集中使用這兩個語句,那麼你需要使用完全合格的程序集名稱)。 –

+0

我添加它但是它是:使用命名空間指令只能應用於命名空間; 'System.Web.Mvc.SelectList'是一個不是名字空間的類型 – touinta