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

时间:2013-05-13 15:39:11

标签: c# asp.net-mvc asp.net-mvc-4

我根据列表中的元素数生成了一些文本框。

模特:

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)
{
..
}

根据语言列表中的语言数量,文本框的数量可能会有所不同。你能告诉我如何在控制器中获取这些文本框的价值

谢谢,

2 个答案:

答案 0 :(得分:3)

替换:

@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)
}

并且模型活页夹会照顾其余部分。

答案 1 :(得分:1)

您必须使用索引for循环来呈现输入的name属性的相应值,TextboxFor帮助程序和隐藏字段,它们会发送{{1}的值property:

Code