如何从View向Controller传递变量?按钮传行号至Controller问询
实现从Edit按钮向Controller传递行号的方案
没问题,我来帮你搞定这个按钮传值的事儿!要实现点击Edit按钮把行号(Line)传给Controller,进而找到对应的Driver进行编辑,咱们可以从视图层和控制器层两部分来处理:
1. 视图层:给每个Edit按钮绑定行号参数
假设你在List视图里是通过遍历Driver列表来渲染每一行数据的,那可以用两种常见方式来实现传值:
方式一:使用Html.ActionLink生成跳转链接
这是最简单的方式,直接生成带参数的GET请求链接:
@model List<Drivers> <table> <thead> <tr> <th>行号</th> <th>驾照号</th> <th>姓名</th> <!-- 其他表头 --> <th>操作</th> </tr> </thead> <tbody> @foreach (var driver in Model) { <tr> <td>@driver.Line</td> <td>@driver.NumberLicens</td> <td>@driver.FirstName @driver.LastName</td> <!-- 其他列内容 --> <td> @* 这里把driver.Line作为参数传给Controller的Edit方法 *@ @Html.ActionLink("Edit", "Edit", "DriverTaxi", new { line = driver.Line }, null) </td> </tr> } </tbody> </table>
方式二:使用表单按钮(适合POST请求场景)
如果需要用POST方式传值,可以用隐藏字段来携带行号:
@foreach (var driver in Model) { <tr> <!-- 其他列 --> <td> @using (Html.BeginForm("Edit", "DriverTaxi", FormMethod.Post)) { <input type="hidden" name="line" value="@driver.Line" /> <button type="submit" class="btn btn-primary">Edit</button> } </td> </tr> }
2. 控制器层:接收行号并找到对应的Driver
在你的DriverTaxiController里,添加一个Edit方法来接收行号参数,然后从静态列表中筛选出要编辑的Driver:
static List<Drivers> Driver = new List<Drivers>(); // GET: DriverTaxi/Edit public ActionResult Edit(int line) { // 根据行号找到对应的Driver var targetDriver = Driver.FirstOrDefault(d => d.Line == line); // 如果没找到,返回404页面 if (targetDriver == null) { return HttpNotFound("未找到对应行号的Driver"); } // 将找到的Driver传给编辑视图 return View(targetDriver); } // 如果用POST方式,需要添加POST版本的Edit方法 [HttpPost] public ActionResult Edit(int line, Drivers updatedDriver) { // 这里处理更新逻辑,比如找到原Driver并替换属性 var targetDriver = Driver.FirstOrDefault(d => d.Line == line); if (targetDriver != null) { targetDriver.NumberLicens = updatedDriver.NumberLicens; targetDriver.FirstName = updatedDriver.FirstName; // 其他属性更新 } // 重定向回列表页 return RedirectToAction("List"); }
小提醒
注意你现在用的是静态List来存储Driver数据,这种方式在多用户访问的场景下会有数据共享、并发修改的问题,只适合本地测试。如果是生产环境,建议改用数据库(比如EF Core)来持久化数据哦!
内容的提问来源于stack exchange,提问作者evgeny
相关产品推荐
相关产品推荐

