如何在ASP.NET Core MVC控制器中不使用jQuery获取TextBox值
解决ASP.NET Core MVC获取TextBox修改后值的问题
问题根源
你当前的代码存在两个核心问题:
- ActionLink是静态GET请求:
@Html.ActionLink生成的URL是页面渲染时的静态链接,参数updatedLocation是初始的item.Location值,用户修改TextBox后不会更新这个参数。 - 模型绑定格式错误:
foreach循环生成的TextBox的name属性不符合ASP.NET Core模型绑定的要求,导致控制器无法识别并接收修改后的值。
纯ASP.NET Core解决方案(无需jQuery/AJAX)
我们通过表单POST提交 + 正确的模型绑定格式来实现需求,步骤如下:
1. 优化模型(新增唯一标识)
为了准确识别要更新的员工,给Employee模型添加Id字段:
public class Employee { public int Id { get; set; } // 唯一标识员工,避免Name重复的问题 public string Name { get; set; } public string Location { get; set; } }
2. 修改控制器初始化数据
在Index方法中给员工分配唯一Id:
public IActionResult Index() { var employees = new List<Employee>(); employees.Add(new Employee { Id = 1, Name="Abcd", Location="abcdLocation1"}); employees.Add(new Employee { Id = 2, Name = "Efgh", Location = "EfghLocation2" }); return View(employees); }
3. 重构视图(使用表单提交)
将每行的更新按钮包裹在独立表单中,提交当前员工的Id和修改后的Location:
@model IEnumerable<AspNetCoreMVC.Models.Employee> @{ ViewData["Title"] = "Home"; } <table class="table" style="width:fit-content"> <thead> <tr> <th>@Html.DisplayNameFor(Model => Model.Name)</th> <th>@Html.DisplayNameFor(Model => Model.Location)</th> <th>操作</th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <td>@item.Name</td> <td> <form asp-action="UpdateAction" method="post"> <!-- 隐藏字段传递员工Id,用于识别要更新的对象 --> @Html.HiddenFor(m => item.Id) <!-- 可编辑的TextBox绑定Location字段 --> @Html.TextBoxFor(m => item.Location) <button type="submit" class="btn btn-sm btn-primary">更新</button> </form> </td> <td></td> </tr> } </tbody> </table>
4. 修改控制器接收POST请求
将UpdateAction改为POST方法,接收员工Id和修改后的Location:
[HttpPost] public IActionResult UpdateAction(int id, string location) { // 这里替换为实际的数据服务更新逻辑 var employees = new List<Employee>(); var emp1 = new Employee { Id = 1, Name = "Abcd", Location = "abcdLocation1" }; var emp2 = new Employee { Id = 2, Name = "Efgh", Location = "EfghLocation2" }; // 根据Id更新对应员工的Location if (id == emp1.Id) { emp1.Location = location; } else if (id == emp2.Id) { emp2.Location = location; } employees.Add(emp1); employees.Add(emp2); return View("Index", employees); }
关键说明
- 表单POST:只有通过表单提交,才能将用户修改后的TextBox值传递到控制器,GET请求无法获取动态修改的表单值。
- HiddenFor字段:通过隐藏字段传递员工Id,确保控制器能准确识别要更新的对象。
- 模型绑定:表单中的字段名会自动匹配控制器方法的参数名(
id对应item.Id,location对应item.Location),ASP.NET Core会自动完成绑定。
内容的提问来源于stack exchange,提问作者hi_shobhit76
相关产品推荐
相关产品推荐

