将下拉列表中的值存储到数据库MVC 5中

时间:2016-03-07 12:00:27

标签: asp.net-mvc

您好我的应用程序中有一个下拉列表

在我的控制器中我用这个

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

}

1 个答案:

答案 0 :(得分: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和Edge中实现),所以除非你使用它,否则它可以删除,但如果你正在使用它,那么你还必须使用[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)](即格式必须是yyyy-MM-dd

然后在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");
}