您好我的应用程序中有一个下拉列表
在我的控制器中我用这个
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 :(得分: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");
}