gpt4 book ai didi

c# - 列表的 Ajax BeginForm 仅返回模型的第一个元素或 null

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:19 32 4
gpt4 key购买 nike

我正在尝试使用 ajax-beginform 调用一个 Action 。

这是我的模型:

public class MyViewModel
{
public List<SubViewModel> SubViewModels {get;set;}
}

public class SubViewModel
{
public string Name {get;set;}
public int Age {get;set;}
public bool Active {get;set;}
}

我的 View 如下所示:(我正在遍历所有 SubViewModel-Items,并希望稍后在我的 DoAction-Method 中取回它们)

@model MyViewModel

@using (Ajax.BeginForm("DoAction", "MyController", null, new AjaxOptions() { HttpMethod = "Post" }, new { @class = "search-form", enctype = "multipart/form-data" }))
{
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Active</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.SubViewModels)
{
<tr>
<td><input type="text" name="Name" value="@item.Name" /></td>
<td><input type="text" name="Age" value="@item.Age" /></td>
<td><input type="checkbox" name="Active" value="@item.Active" /></td>
</tr>
}
</tbody>
</table>
<input type="submit" value="OK" />
}

这是我的 Action :

[System.Web.Mvc.HttpPost]
public async Task DoAction([FromBody] MyViewModel model)
{
// here model is null
}

它总是在 DoAction 中遇到断点但是:

  • 如果模型类型是MyViewModel , 属性(property) SubViewModels为空。
  • 如果模型类型是IEnumerable<SubViewModel> ,模型为空。
  • 如果模型类型是SubViewModel ,第一个数据集在参数中。

所以我猜,这个 ajax 操作的正确参数来自类型 SubViewModel .

但我需要 MyViewModelIEnumerable<SubViewModel>获取所有列出的模型项目。

最佳答案

您需要为输入命名,以便模型绑定(bind)器可以适本地绑定(bind)发布数据。现在,列表中的每个项目都通过相同的属性名称发布:NameAgeActive。您实际需要的是像 SubViewModels[N].Name 这样的名称,其中 N 是一个整数索引值。执行此操作的最简单方法是实际使用 HTML 帮助程序生成输入,并且您还需要使用 for 循环,而不是 foreach:

@for (var i = 0; i < Model.SubViewModels.Count(); i++)
{
<tr>
<td>@Html.TextBoxFor(m => m.SubViewModels[i].Name)</td>
<td>@Html.TextBoxFor(m => m.SubViewModels[i].Age)</td>
<td>@Html.CheckBoxFor(m => m.SubViewModels[i].Name)</td>
</tr>
}

关于c# - 列表的 Ajax BeginForm 仅返回模型的第一个元素或 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42674130/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com