【问题标题】:Loop List In View And Bind Values to Model Depending on List Index在视图中循环列表并根据列表索引将值绑定到模型
【发布时间】:2016-11-30 08:01:54
【问题描述】:

我有这个模型:

public class ClassRoom
{
    public List<Student> Students { get; set; }
}
public class Student
{
    public int ID { get; set; }
    public int Type { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }
}

ID 和 Type 的值已经满了,我需要创建一个视图,学生可以在其中添加他的姓名和姓氏。 所以我需要循环视图中的学生列表。

我正在做以下事情:

@model Models.ClassRoom

@{
    ViewBag.Title = "Classroom";
}


@if (Model != null)
{
<form action="Controller/Method">
    foreach (var item in Model.Students)
    {
        @Html.HiddenFor(model => model.ID) 
        <div>
            @Html.TextBoxFor(model => model.Name)
            @Html.TextBoxFor(model => model.LastName)
        </div>

    }
    <input type="submit">
  </form>
  }

我想最终提交一个 Classroom 类型的模型,其中包含一个学生列表,每个 ID 都填写了姓名和姓氏

但这不起作用。

如何将视图中的值绑定到列表中某个索引上的项目?

对于隐藏输入中的每个ID,我想保存写好的名字和姓氏。

请帮忙

我需要创建一个表单并最终提交包含完整学生列表的教室。我的 Controller 方法和视图中的类型应该是什么?

【问题讨论】:

  • 但这不起作用。 - 为什么?有异常,有什么不显示?更详细地解释您对它应该如何工作的期望。
  • 如何将新值发送到控制器?
  • @Cubi 请检查我的问题的更新
  • @3615 无法将值绑定到某个特定索引。 Model 中没有“ID”或“Name”,它们在 Model.Students 中
  • 请参阅@3615 的答案。更详细的解释(以及首选的EditorTemplate 方法),请参阅this answer

标签: c# asp.net-mvc view model


【解决方案1】:

如果要将模型发送回控制器,则需要正确生成命名。有几种方法,其中一种如下所示:

@using (Html.BeginForm("Index", "Home")) {
    <div style="margin-top: 100px;">
        @if (Model != null) {
            for (var i = 0; i <= Model.Students.Count - 1; i++) {
                @Html.HiddenFor(model => model.Students[i].ID)
                <div>
                    @Html.TextBoxFor(model => model.Students[i].Name)
                    @Html.TextBoxFor(model => model.Students[i].LastName)
                </div>
            }
        }
        <input type="submit" value="Go"/>
    </div>
}

并且在控制器中不要忘记添加:

[HttpGet]
public async Task<IActionResult> Index() {
    var classroom = new ClassRoom();
     ... //add some students to the classroom
    return View(classroom);
}

[HttpPost]
public async Task<IActionResult> Index(ClassRoom classRoom) {
    ...
}

这里可以找到一些more reading。

【讨论】:

  • 我们如何将每个值绑定到索引处的项目?
  • 这是将模型 ClassRoom 发送到具有 Student Count = 0 列表的控制器方法。知道为什么吗?
  • @HelpASisterOut 这假设要编辑学生,你的模型首先有学生吗?
  • @HelpASisterOut,如果您的集合在生成视图时包含Student 对象,那么它们将被正确绑定。
  • @HelpASisterOut,我拒绝了您的编辑(我希望其他人也会这样做) - 添加 EditorFor(m =&gt; m.Students) 只会根据模板再次重复输入(这将毫无意义,因为 DefaultModelBinder 将只绑定for循环中控件生成的值,忽略EditorFor()生成的值
猜你喜欢
  • 2013-04-05
  • 2020-01-21
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多