2016-03-07 38 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