You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 12:54:05