在ASP.NET MVC控制器中判断绑定数据库的复选框是否勾选
在ASP.NET MVC控制器中判断绑定数据库的复选框是否勾选
嘿,看了你的代码,其实你已经走在正确的路上了,但有几个可以优化的点,而且你完全不需要额外传递那个单独的IsSeminar参数——你的News实体本身就包含这个布尔属性,ASP.NET MVC的模型绑定会自动帮你把视图里复选框的状态映射到news对象的IsSeminar属性上。
具体调整方案:
简化控制器方法参数并修正逻辑
删掉控制器方法里单独的bool IsSeminar参数,直接用news实例的IsSeminar属性判断复选框状态。另外注意一个关键错误:你之前在添加Seminarparticipants时直接用news.NewsID是无效的,因为此时news还没被保存到数据库,自增的NewsID还未生成,必须先保存news再添加关联数据。修改后的控制器代码如下:public ActionResult Create(News news, HttpPostedFileBase NewsImageUrl) { if (ModelState.IsValid) { string imagename = "no-photo.jpg"; if (NewsImageUrl != null) { imagename = Guid.NewGuid().ToString().Replace("-", "") + Path.GetExtension(NewsImageUrl.FileName); NewsImageUrl.SaveAs(Server.MapPath("/NewsImage/Images/" + imagename)); // 图片缩放逻辑保留 ImageResizer img = new ImageResizer(); img.Resize(Server.MapPath("/NewsImage/Images/" + imagename), Server.MapPath("/NewsImage/Thumb/" + imagename)); } news.NewsImageUrl = imagename; news.CreateDate = DateTime.Now; // 判断复选框是否勾选 if (news.IsSeminar) { // 先保存news,获取数据库自动生成的NewsID db.News.Add(news); db.SaveChanges(); // 再添加关联的Seminarparticipants数据 db.Seminarparticipants.Add(new Seminarparticipants() { NewsID = news.NewsID, FullName = string.Empty, Phone = string.Empty, Email = string.Empty }); db.SaveChanges(); } else { db.News.Add(news); db.SaveChanges(); } return RedirectToAction("Index"); } return View(news); }视图部分无需修改
你当前视图里的@Html.EditorFor(model => model.IsSeminar)会自动渲染成复选框,因为IsSeminar是布尔类型,模型绑定会完美适配:复选框勾选时news.IsSeminar为true,未勾选则为false,这部分逻辑完全没问题。
补充说明:
- 单独传递
bool IsSeminar属于冗余操作,News实体已经包含该属性,模型绑定会自动处理表单数据与实体属性的映射,没必要多此一举。 - 必须先保存
news到数据库再处理关联的Seminarparticipants,否则news.NewsID是默认值(通常为0),会导致外键关联错误。
内容的提问来源于stack exchange,提问作者Mansoure
相关产品推荐
相关产品推荐

