You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在ASP.NET Controller中保存表单所有textarea输入值到列表?

嗨,我来帮你解决这个问题!你的核心需求是让多个textarea的输入值能在Controller里被收集到一个列表中,关键在于给每个textarea设置正确的name属性——因为ASP.NET的模型绑定是靠这个来识别字段的,另外原代码里所有textarea的id都重复了,这也是HTML规范不允许的,得一起修正。

方案一:使用强类型ViewModel(推荐)

这种方式更符合ASP.NET MVC的最佳实践,类型安全且易维护。

1. 先定义你的ViewModel

假设你用来渲染页面的模型是一个包含“显示文本”和“输入内容”的列表,先创建对应的ViewModel类:

public class TextInputItem
{
    // 用来显示的标题文本
    public string Text { get; set; }
    // 用来接收textarea输入的内容
    public string InputContent { get; set; }
}

2. 修改视图代码

foreach改成for循环(因为模型绑定需要索引来识别列表项),用Html.TextAreaFor自动生成正确的nameid

@model List<TextInputItem>

<form asp-action="SaveInputs" method="post">
    @for (int i = 0; i < Model.Count; i++)
    {
        <div class="form-group">
            <h6 class="text-center">@Html.DisplayFor(m => m[i].Text)</h6>
            @Html.TextAreaFor(m => m[i].InputContent, new { @class = "form-control", rows = 3 })
        </div>
    }
    <button type="submit" class="btn btn-primary">提交</button>
</form>

Html.TextAreaFor会自动生成类似name="[0].InputContent"name="[1].InputContent"这样的属性,ASP.NET的模型绑定器能自动把这些值映射到List<TextInputItem>中。

3. 编写Controller的接收方法

在你的Controller里添加一个Post方法来接收表单数据:

[HttpPost]
public IActionResult SaveInputs(List<TextInputItem> model)
{
    // 提取所有textarea的输入值到列表
    var allInputValues = model.Select(item => item.InputContent).ToList();
    
    // 这里写你的保存逻辑,比如存入数据库、文件等
    // ...

    return RedirectToAction("Index"); // 提交后的跳转
}

方案二:直接使用字符串列表(快速实现)

如果不想定义额外的ViewModel,也可以手动给每个textarea设置统一格式的name属性:

1. 修改视图代码

foreach遍历的同时,给每个textarea设置name="InputList[]"

@model IEnumerable<YourOriginalModel> <!-- 这里是你原来的模型类型 -->

<form asp-action="SaveInputs" method="post">
    @foreach (var item in Model)
    {
        <div class="form-group">
            <h6 class="text-center">@Html.DisplayFor(modelItem => item.Text)</h6>
            <textarea class="form-control" name="InputList[]" rows="3"></textarea>
        </div>
    }
    <button type="submit" class="btn btn-primary">提交</button>
</form>

2. Controller接收方法

直接接收List<string>类型的参数:

[HttpPost]
public IActionResult SaveInputs(List<string> InputList)
{
    // InputList就是所有textarea的输入值,顺序和视图里的渲染顺序一致
    // 执行你的保存逻辑
    // ...

    return RedirectToAction("Index");
}

关键注意点

  • 一定要给textarea设置name属性:表单提交时,只有带name的元素值才会被发送到服务器。
  • 避免重复的id:原代码里所有textarea的id都是exampleFormControlTextarea3,这不符合HTML规范,可能导致JS操作出错,用上面的方案会自动生成唯一的id

内容的提问来源于stack exchange,提问作者licenta123

火山引擎 最新活动