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
相关产品推荐
相关产品推荐

