ASP.NET MVC post可变数量的文本框到控制器

本文关键字:文本 控制器 MVC NET post ASP | 更新日期: 2023-09-27 18:13:16

根据列表中元素的个数生成一个数字文本框。

模型

public class MyModel
{
    public List<Language> Languages { get; set; }
    public string  Code { get; set; }
}
public class Language
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    public bool IsDefault { get; set; }
}

视图:

@model MyModel
<form id="formDetail">
@Html.TextBoxFor(m => m.Code)
@foreach (var item in Model.Language)
{   
    <input type="text" id="@item.Code"/> //the code are : FR, EN, GE, ...
}
</form>

我用Ajax发布表单(post)。

控制器:

[HttpPost]
public ActionResult Save(MyModel myModel)
{
..
}

根据"语言"列表中语言的数量,文本框的数量可以不同。你能告诉我如何在控制器

中获取这些文本框的值吗?

谢谢,

ASP.NET MVC post可变数量的文本框到控制器

Replace:

@foreach (var item in Model.Language)
{   
    <input type="text" id="@item.Code"/> //the code are : FR, EN, GE, ...
}

:

@for (var i = 0; i < Model.Language.Count; i++)
{   
    @Html.HiddenFor(x => x.Language[i].Id)
    @Html.HiddenFor(x => x.Language[i].Name)
    @Html.HiddenFor(x => x.Language[i].IsDefault)
    @Html.EditorFor(x => x.Language[i].Code)
}

模型绑定器会处理剩下的

您必须使用索引for循环来呈现name属性的相应值,用于输入,TextboxFor助手和隐藏字段,该字段发送Code属性的值:

@for (int i=0; i<Model.Language.Count; i++)
{   
    @Html.TextboxFor(m => Model.Language[i].Name)
    @Html.HiddenFor(m => Model.Language[i].Code)
}