.NET Core 6如何传递URL查询参数group_id到Ticket创建页绑定模型
.NET Core 6 基架CRUD页URL查询参数自动绑定表单实现方案
控制器GET请求逻辑修改
你已经通过[FromQuery]正确拿到了URL中的group_id参数,接下来不需要额外传ViewBag/ViewData,直接初始化一个预赋值的Ticket实体传给强类型视图即可,代码如下:
// GET: Tickets/Create [HttpGet] public IActionResult Create([FromQuery(Name = "group_id")] int previous_group_id) { // 初始化空工单实体,预填充从URL获取的分组ID var newTicket = new Ticket { group_id = previous_group_id }; return View(newTicket); }
注意:基架生成的Create视图默认是强类型绑定
Ticket模型的,直接传预赋值的实体对象是最符合EF Core基架规范的写法,不需要额外做参数传递。
视图层表单配置
打开基架生成的Views/Tickets/Create.cshtml文件,找到group_id字段对应的表单项:
- 如果不需要用户查看/修改关联分组ID,直接将原有的输入控件替换为隐藏域即可:
<input asp-for="group_id" type="hidden" /> - 如果需要向用户展示当前关联的分组ID做确认,可以增加只读展示文本,同时保留隐藏域用于值提交(只读/禁用的输入框默认不会随表单提交值,必须加隐藏域):
<div class="form-group mb-3"> <label class="form-label">当前关联分组ID</label> <input value="@Model.group_id" class="form-control" readonly /> <input asp-for="group_id" type="hidden" /> </div>
标签辅助器asp-for会自动把模型里预填的group_id值渲染到input的value属性中,不需要手动写value绑定。
POST提交逻辑无需额外修改
基架生成的POST类型Create方法默认以Ticket实体作为参数,表单提交时模型绑定会自动读取隐藏域中的group_id值,绑定到Ticket.group_id属性上,直接调用基架生成的保存逻辑即可把关联分组的工单存入数据库,不需要额外修改POST方法代码。
模型绑定相关说明
- 你的需求完全可以通过默认模型绑定实现,不需要开发自定义绑定逻辑
- .NET Core模型绑定默认按「表单字段 > 路由参数 > URL查询字符串」的优先级匹配同名参数,大小写不敏感
- 你在GET Action中用
[FromQuery]指定参数来源是正确的,明确指定绑定来源可以避免参数名不匹配导致的绑定失败
内容的提问来源于stack exchange,提问作者Rui Ruivo
相关产品推荐
相关产品推荐

