.NET MVC中如何将研讨会外键从列表视图传递到预约视图并保存
解决方案
1. 修改PreBook的GET请求动作
调整控制器代码接收Index视图传递的研讨会ID,预先初始化预约模型:
public IActionResult PreBook(int id) // 参数名和Index视图中asp-route-Id对应 { // 查询选中的研讨会信息 var selectedSeminar = _context.Seminars.FirstOrDefault(s => s.IdSeminar == id); if (selectedSeminar == null) { return RedirectToAction("Index"); } // 初始化预约模型,预先填充研讨会外键 var preBookModel = new PreBook() { IdSeminar = selectedSeminar.IdSeminar }; // 存储研讨会名称用于视图展示 ViewBag.SelectedSeminarName = selectedSeminar.Name; return View(preBookModel); }
2. 修改PreBook预约视图
添加隐藏域存储研讨会外键,同时展示选中的研讨会名称:
@model PreBook <form method="post" asp-action="PreBook"> <div class="border p-3"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <p></p> <!-- 展示选中的研讨会名称 --> <h4>您选择的研讨会:@ViewBag.SelectedSeminarName</h4> <!-- 隐藏域存储研讨会外键,提交时自动绑定到模型 --> <input type="hidden" asp-for="IdSeminar" /> <div class="row"> <div class="col-8"> <div class="form-group row"> <div class="col-4"> <b>姓名:</b> </div> <div class="col-8"> <input asp-for="Name" class="form-control" /> <span asp-validation-for="Name" class="text-danger"></span> </div> </div> <div class="form-group row"> <div class="col-4"> <b>姓氏:</b> </div> <div class="col-8"> <input asp-for="Surname" class="form-control" /> <span asp-validation-for="Surname" class="text-danger"></span> </div> </div> <div class="form-group row"> <div class="col-4"> <b>地址:</b> </div> <div class="col-8"> <input asp-for="Adress" class="form-control" /> <span asp-validation-for="Adress" class="text-danger"></span> </div> </div> <div class="form-group row"> <div class="col-4"> <b>邮箱:</b> </div> <div class="col-8"> <input asp-for="Email" class="form-control" /> <span asp-validation-for="Email" class="text-danger"></span> </div> </div> <div class="form-group row"> <div class="col-4"> <b>手机号:</b> </div> <div class="col-8"> <input asp-for="PhoneNum" class="form-control" /> <span asp-validation-for="PhoneNum" class="text-danger"></span> </div> </div> <div class="form-group row"> <input type="submit" value="确认预约" class="btn btn-primary" /> </div> </div> <div class="col-4"> @*Keep this empty*@ </div> </div> </div> </form>
3. 可选优化点
现有代码存在几处笔误可同步修正:
- Seminar模型中的
List<Predbiljezba> Predbiljezbe需改为List<PreBook> PreBooks,和预约模型类名一致,避免EF关联查询出错 - 视图中
asp-validation-summery拼写错误,正确为asp-validation-summary - 多个输入框的
form-controll样式名拼写错误,正确为form-control
你原有POST动作无需修改,模型绑定会自动将隐藏域的外键值和用户提交的信息绑定到PreBook对象,直接存入数据库即可。
内容的提问来源于stack exchange,提问作者Tenky
相关产品推荐
相关产品推荐

