.Net Framework MVC数据库无法写入baslangic等字段数据问题求助
解决ASP.NET MVC表单字段无法写入数据库的问题
问题核心很明确:你的控制器方法完全没处理视图里提交的baslangic、bitis、kisi_sayisi字段,只接收了hotelid和customerid,自然不会把这些值写入数据库。以下是两种可行的解决方法:
方法1:直接添加对应参数并赋值
修改控制器的ConfirmHotelReservation方法,把表单里的字段作为参数接收,然后手动赋值给 reservation 对象:
[HttpPost] public ActionResult ConfirmHotelReservation(int? hotelid, int? customerid, DateTime baslangic, DateTime bitis, int kisi_sayisi) { TBLHOTELREZERVASYON reservation = new TBLHOTELREZERVASYON(); reservation.hotel = hotelid; reservation.musteri = customerid; // 新增这三行,把表单提交的字段赋值给实体 reservation.baslangic = baslangic; reservation.bitis = bitis; reservation.kisi_sayisi = kisi_sayisi; db.TBLHOTELREZERVASYON.Add(reservation); db.SaveChanges(); return RedirectToAction("Index"); }
方法2:使用模型绑定(推荐,符合MVC最佳实践)
如果你的TBLHOTELREZERVASYON实体已经包含baslangic、bitis、kisi_sayisi这三个属性,可以直接把实体作为控制器方法的参数,MVC会自动帮你绑定表单提交的值:
[HttpPost] public ActionResult ConfirmHotelReservation(TBLHOTELREZERVASYON reservation, int? hotelid, int? customerid) { // 补充从路由/会话传入的hotel和customer ID reservation.hotel = hotelid; reservation.musteri = customerid; // 可选:验证表单输入的合法性,比如日期不能乱填 if (ModelState.IsValid) { db.TBLHOTELREZERVASYON.Add(reservation); db.SaveChanges(); return RedirectToAction("Index"); } // 如果验证失败,返回原视图并保留用户已输入的内容 // 注意这里要重新填充下拉列表的ViewBag数据,否则下拉框会空 ViewBag.person = // 这里写你之前填充下拉列表的代码,比如从数据库获取选项 return View(reservation); }
额外注意事项
- 确保
TBLHOTELREZERVASYON实体的属性名称和视图里TextBoxFor/DropDownListFor绑定的名称完全一致(大小写敏感),比如视图里的x => x.baslangic必须对应实体里的baslangic属性。 - 如果日期字段绑定有问题,可以在视图里给
TextBoxFor添加日期类型属性:new { @class = "form-control", @required = "required", type = "date" },确保浏览器提交标准的日期格式。
内容的提问来源于stack exchange,提问作者Ömer
相关产品推荐
相关产品推荐

