如何将View中的Model值传递到Controller?详解ID传递至AAA方法
如何将View数据传递到Controller(重点传递ID到AAA方法)
针对你的场景,我来一步步说明怎么调整代码,让ID能正确传递到Controller的AAA方法里。
问题分析
你当前的视图代码里,每个表单只有一个提交按钮,没有携带ABCDE模型的任何数据(比如ID),所以Controller的AAA方法接收的model对象里,ID会是默认值0,无法拿到对应项的真实ID。
解决方案1:传递完整模型(推荐需要整个模型数据时用)
在表单内部添加隐藏字段,把ID(以及你需要的其他模型属性)传递给Controller。修改后的视图代码如下:
@model IList<Jednoslad.Models.ABCDE> @{ ViewBag.Title = "title"; Layout = "~/Views/Layout/_Layout.cshtml"; } @foreach (var m in Model) { using (Html.BeginForm("AAA", "BBB")) { <!-- 添加隐藏字段传递ID --> @Html.HiddenFor(x => m.ID) <!-- 如果需要其他属性,也可以添加对应的隐藏字段 --> @Html.HiddenFor(x => m.Name) @Html.HiddenFor(x => m.Surname) <div class="moto"> <h1>@m.ID</h1> <h2>@m.Name</h2> <input type="submit" name="model" value="AAA"/> </div> } }
你的Controller代码可以保持不变,提交后model.ID就能拿到对应项的真实值了:
[HttpPost] public ActionResult AAA(ABCDE model) { // 这里model.ID就是你点击的项的ID return View(); }
解决方案2:只传递ID(更轻量,仅需要ID时用)
如果你只需要传递ID,不需要整个模型,可以直接修改Controller的方法参数为int id,然后在表单里通过隐藏字段或者路由参数传递ID:
修改Controller:
[HttpPost] public ActionResult AAA(int id) { // 这里直接拿到ID return View(); }
修改视图(两种方式):
方式A:用隐藏字段传递ID
@foreach (var m in Model) { using (Html.BeginForm("AAA", "BBB")) { @Html.Hidden("id", m.ID) <!-- 注意name要和Controller参数名一致 --> <div class="moto"> <h1>@m.ID</h1> <h2>@m.Name</h2> <input type="submit" value="AAA"/> </div> } }
方式B:通过表单路由参数传递
@foreach (var m in Model) { // 把ID放到路由参数里 using (Html.BeginForm("AAA", "BBB", new { id = m.ID }, FormMethod.Post)) { <div class="moto"> <h1>@m.ID</h1> <h2>@m.Name</h2> <input type="submit" value="AAA"/> </div> } }
这样提交后,Controller的id参数就能直接拿到对应项的ID了。
额外提示
你模型里的Surname字段是int类型,这看起来有点奇怪(姓氏一般是字符串),如果是笔误的话记得改成string类型哦~
内容的提问来源于stack exchange,提问作者Piateczka18
相关产品推荐
相关产品推荐

