c# - View 对象中的 LIST<VIEWMODEL> 在 Controller mvc.net 中返回 null

标签 c# asp.net-mvc

我有一个类对象列表,它与这样的 View 绑定(bind)

@model List<Rep.Models.ContactReportSettingViewModel>
var accountArr = Model.Select(x => new { x.AccountId, x.CarrierId, x.AccountNumber, x.CarrierName, x.ClientId, x.ContactId }).Distinct();

我在 var 对象上有一个循环

@foreach (var accountRow in accountArr)
{
  @Html.LabelFor(x => accountRow.AccountNumber, accountRow.AccountNumber, new { @id = accountRow.AccountId })              

但是当我单击“保存”时,它返回 null 或值,或者未使用类属性设置我在 Controller 中访问它,如下所示:

public RESULT method(List<ContactReportSettingViewModel> model)
{ 
  model is null here
  // return View(model);            
}

但是在模型中我得到了 null。我做错了什么?

当我使用这个

public RESULT method(ContactReportSettingViewModel model)
{ 
  // return View(model);            
}

然后在模型对象中我可以看到所有属性,但值未设置为这些属性

最佳答案

您不能使用 foreach循环为集合生成表单控件,因为您生成重复的 name与您的模型无关的属性(以及重复的 id 属性,这是无效的 html)。您可以使用 for在 View 中循环,或使用 EditorTemplate适合您的模型。

请注意,您需要删除 Linq .Select()代码并在 Controller GET 方法中进行过滤。

使用 for主视图中的循环(注意模型必须是 IList<T> )

@model List<Rep.Models.ContactReportSettingViewModel>
@using (Html.BeginForm())
{
  @for (int i = 0; i < Model.Count; i++)
  {
    @Html.LabelFor(m => m[i].AccountNumber)
    @Html.TextBoxFor(m => m[i].AccountNumber)
    @Html.ValidationMessageFor(m => m[i].AccountNumber)
    .....
  }
  <input type="submit" .../>
}

使用EditorTemplate 。在 /Views/Shared/EditorTemplates/ContactReportSettingViewModel.cshtml 中创建局部 View (注意文件名必须与模型类名匹配)

@model Rep.Models.ContactReportSettingViewModel

@Html.LabelFor(m => m.AccountNumber)
@Html.TextBoxFor(m => m.AccountNumber)
@Html.ValidationMessageFor(m => m.AccountNumber)
  .....

然后在主视图中(注意模型可以是 IEnumerable<T> )

@model IEnumerable<Rep.Models.ContactReportSettingViewModel>
@using (Html.BeginForm())
{
  @Html.EditorFor(m => m)
  <input type="submit" .../>
}

在这两种情况下,生成的 html 将包含正确的 name带有索引器的属性将在 POST 方法中绑定(bind)到您的模型

<input type="text" name="[0].AccountNumber" .. />
<input type="text" name="[1].AccountNumber" .. />

关于c# - View 对象中的 LIST<VIEWMODEL> 在 Controller mvc.net 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32202753/

相关文章:

c# - ASP.NET MVC 项目 web.config 和 app.config 文件

c# - 如何从其他类可以使用的外部设置文件创建字典?

c# - UITabBar 或 UITabBarItem 的触摸事件

c# - 我应该在我的 LINQ 查询中使用两个 "where"子句还是 "&&"?

javascript - asp.net-mvc:javascript 缓存

css - 将自定义 CSS 链接到 MVC6

c# - 如何在 C# 中组合部分类对象?

c# - 如何使用 C# 按下并释放它?

c# - 编译器错误消息: CS0246: The type or namespace name could not be found

javascript - 在不阻止 javascript 的情况下显示 javascript 警报