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

C# MVC视图循环生成textarea值无法传递到控制器求助

问题原因

你当前的核心问题是视图中textarea的name属性与控制器参数名称不匹配,导致ASP.NET Core的模型绑定无法将表单提交的值映射到string[] answers参数上。你现在生成的textarea名称是contentn20、contentn21这类动态命名的字段,而控制器期望接收名为answers的数组参数,自然无法获取到值。


解决方案

方案1:修改textarea的name为统一数组格式(快速解决)

直接将循环生成的textarea的name设置为answers[],让ASP.NET Core自动识别为数组参数:

修改Quest.cshtml的循环部分

@{  
     int index = 0;
      
     for (var i = 0; i < quest.Count; i++)
     {
        <table> 
           @quest[i].ParolaRicercata <br>            
           <textarea name="answers[]" class="textareaquest" maxlength="30" placeholder="Risposta" required> </textarea> <br> 
        </table> 
                
        ++index;      
     }
}

简化HomeController的Result方法

此时可以直接通过answers参数获取所有输入值,无需再传递loop_length:

[HttpPost]
public IActionResult Result(string[] answers) 
{           
    ViewBag.support2 = answers;
    ViewBag.ll = answers?.Length ?? 0;

    return View();
}

方案2:使用强类型视图模型(推荐,适合复杂场景)

如果后续需求可能扩展,建议使用强类型模型来管理表单数据,避免手动维护字段名称:

1. 创建视图模型类

namespace WebDiz2.Models
{
    public class QuestSubmissionViewModel
    {
        // 存储所有用户答案
        public List<string> Answers { get; set; }
        // 存储问题列表(用于渲染视图)
        public List<FileTXTModel> Questions { get; set; }
    }
}

2. 修改渲染视图的Controller Action

将问题数据封装到视图模型中传递给视图:

public IActionResult Quest()
{
    var FTMM = new WebDiz2.Models.FileTXTMethodsModel();
    var questList = FTMM.Function2(ViewBag.quest_type, ViewBag.quest_number);
    
    var viewModel = new QuestSubmissionViewModel
    {
        Questions = questList,
        Answers = new List<string>(new string[questList.Count])
    };
    
    return View(viewModel);
}

3. 修改Quest.cshtml为强类型视图

使用asp-for标签助手自动生成正确的字段名称:

@model WebDiz2.Models.QuestSubmissionViewModel

<form asp-controller="Home" asp-action="Result" method="POST">
    @for (var i = 0; i < Model.Questions.Count; i++)
    {
        <table> 
           @Model.Questions[i].ParolaRicercata <br>            
           <textarea asp-for="Answers[i]" class="textareaquest" maxlength="30" placeholder="Risposta" required> </textarea> <br> 
        </table> 
    }                          
    <br> <button type="submit" class="checkandinvio"> INVIO </button> <br> <br>            
</form>

4. 修改接收提交的Result方法

直接接收视图模型参数:

[HttpPost]
public IActionResult Result(QuestSubmissionViewModel model) 
{           
    ViewBag.support2 = model.Answers;
    ViewBag.ll = model.Answers?.Count ?? 0;

    return View();
}

关键注意事项
  • 表单必须使用POST方法提交(你的代码已满足);
  • 模型绑定依赖字段名称的一致性,数组/集合类型需要统一的名称前缀(如answers[]或Answers[i]);
  • 强类型模型的方式更易维护,能有效避免手动命名导致的错误,尤其适合复杂表单场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:19:51