ASP.NET MVC:如何从View向Controller传递两个值?
解决ASP.NET Core表单传值失败问题
问题根源
<label>不是有效表单控件:你用<label>传递固定值,但label仅用于关联表单元素,不会被表单提交,导致selection参数始终无法传递到控制器。- 控制器代码存在拼写错误:
[Httppost]应为[HttpPost],returnView应为return View,这些语法错误会导致请求无法正确匹配方法。 - 单表单多按钮场景下,按钮的
value可被正确提交,但前提是表单控件配置正确。
修正方案
方案1:用隐藏输入框传递固定值(推荐)
将视图中的<label>替换为<input type="hidden">,同时修正控制器的拼写错误:
修正后的视图代码
<tbody> <form action="~/Home/ReadOption" method="post"> <!-- 用hidden input传递固定值,这是表单可识别的标准控件 --> <input type="hidden" name="selection" value="delivery" /> @foreach (var item in Model) { <tr> <td> <button type="submit" class="btn btn-link" value="@item.DeliveryNumber" name="identi"> @item.DeliveryNumber </button> </td> <td>@item.OrderNumber</td> <td>@item.RemitNumber</td> <td>@item.CantPhotos</td> <td>@item.Date</td> <td>@item.Time</td> </tr> } </form> </tbody>
修正后的控制器代码
[HttpPost] // 修正拼写:Httppost → HttpPost public IActionResult ReadOption(string selection, string identi) { List<OrderViewModel> OrderList; try { identi = CleanString(identi); if (string.IsNullOrEmpty(identi)) // 简化空值判断逻辑 { return View("Index"); // 修正拼写:returnView → return View } switch (selection) { case "order": OrderList = ViewOrder(identi); return View("Order", OrderList); // 修正变量名大小写:orderList → OrderList case "remit": OrderList = ViewRemittance(identi); return View("Order", OrderList); case "delivery": OrderList = ViewDelivery(identi); return View("Order", OrderList); default: return View(); // 添加default分支,避免无匹配场景下无返回值 } } catch (Exception ex) { ViewBag.error = ex.Message; return View("Error"); } }
方案2:每行独立表单(适用于需不同固定值的场景)
如果后续需要为不同行设置不同的selection值,可将表单放到循环内部:
<tbody> @foreach (var item in Model) { <tr> <td> <form action="~/Home/ReadOption" method="post"> <input type="hidden" name="selection" value="delivery" /> <button type="submit" class="btn btn-link" value="@item.DeliveryNumber" name="identi"> @item.DeliveryNumber </button> </form> </td> <td>@item.OrderNumber</td> <td>@item.RemitNumber</td> <td>@item.CantPhotos</td> <td>@item.Date</td> <td>@item.Time</td> </tr> } </tbody>
关键说明
- 隐藏输入框:
<input type="hidden">是表单的标准控件,提交时会自动将name和value传递到服务器,这是传递固定值的正确方式。 - 拼写检查:ASP.NET Core的特性和方法名区分大小写,
[HttpPost]和return View()的拼写错误会直接导致请求匹配失败。 - 变量名一致性:控制器中返回视图时,需保证传递的变量名与定义的变量名一致,否则会出现编译错误。
内容的提问来源于stack exchange,提问作者popo
相关产品推荐
相关产品推荐

