【发布时间】:2015-04-12 04:04:58
【问题描述】:
当我的索引视图显示 2 个人并且没有一个人被选中时,由于 .NET 4.5 中的 MinLengthAttribute,模型验证工作正常。
现在是我在 ui 中的自定义逻辑。当索引视图中只显示一个人时,我不需要复选框来检查它。客户可以直接按下提交按钮。我尝试手动填充 SelectedIds 数组,请参阅@else 子句。
但是这个代码:Model.SelectedIds = new int[]{ item.PersonId};
不起作用,服务器端操作上的 viewmodel.SelectedIds 属性始终为 {int[0]}
如何仍将一个人的 ID 分配给 SelectedIds 数组?
查看
@model ListTest.Models.PeopleListViewModel
@{
var hasMoreThanOnePerson = @Model.People.Count > 1;
}
@Html.BeginForm("Save", "Home")
{
@Html.ValidationSummary(false)
<table>
@foreach (var item in Model.People)
{
<tr>
@if (hasMoreThanOnePerson)
{
<td>
<input type="checkbox" name="SelectedIds" value="@item.PersonId" />
</td>
}
else
{
Model.SelectedIds = new int[]{ item.PersonId};
}
<td>
<input type="text" value="@item.Name" />
</td>
</tr>
}
</table>
<input type="submit" value="Save" />
}
视图模型
public class PeopleListViewModel
{
public PeopleListViewModel()
{
SelectedIds = new int[] { };
}
[MinLength(1, ErrorMessage = "Minimum one person must be selected!")]
public int[] SelectedIds { get; set; }
public List<Person> People { get; set; }
}
控制器
public ActionResult Index()
{
var people = new List<Person> {
new Person { Name = "Horst", PersonId = 10 },
new Person { Name = "Michael", PersonId = 20}
};
return View(new PeopleListViewModel { People = people });
}
[HttpPost]
public ActionResult Save(PeopleListViewModel viewModel)
{
if (ModelState.IsValid)
{
}
viewModel.People = new List<Person> { new Person { Name = "Horst", PersonId = 10 }, new Person { Name = "bernarnd", PersonId = 20 } };
return View("Index", viewModel);
}
【问题讨论】:
-
Model.SelectedIds = new int[]{ item.PersonId};只是在发送到客户端之前在服务器上设置值。当只有一个人时,您永远不会为SelectedIds属性呈现任何输入,因此不会回发任何内容,因此SelectedIds在回发时是一个空数组并且验证失败。
标签: c# asp.net-mvc asp.net-mvc-5 .net-4.5