【问题标题】:ASP.NET MVC post variable number of textbox to controllerASP.NET MVC 将可变数量的文本框发布到控制器
【发布时间】:2013-05-13 23:46:10
【问题描述】:

我根据列表中元素的数量生成多个文本框。

型号:

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

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

谢谢,

【问题讨论】:

  • 可以添加js post方法吗?

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


【解决方案1】:

替换:

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

模型绑定器会负责其余的工作。

【讨论】:

  • 不是那个,我的错误,我改写一下。我有一个包含 3 种语言的列表,我必须为每个文本框生成。这些文本框的值不是语言列表中的值。一个真实的例子,我必须给一个产品一个名字,一个语言的名字。我想将这些名称发布到控制器。
  • 那么你应该在你的视图模型中有一个对应的列表来绑定文本框。在呈现此视图的操作中,从您拥有的 Languages 集合中填充此 List 属性。
【解决方案2】:

您必须使用索引 for 循环来呈现输入的 nameattribute、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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    相关资源
    最近更新 更多