You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core MVC控制器中不使用jQuery获取TextBox值

解决ASP.NET Core MVC获取TextBox修改后值的问题

问题根源

你当前的代码存在两个核心问题:

  1. ActionLink是静态GET请求:@Html.ActionLink生成的URL是页面渲染时的静态链接,参数updatedLocation是初始的item.Location值,用户修改TextBox后不会更新这个参数。
  2. 模型绑定格式错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:35:26