运行后,当我在“用户名”文本框中键入值并单击“提交”按钮时。 在Controller中我检查对象显示空值....如果我删除forloop并列出其工作......给我一个解决方案
控制器:
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(LogonViewModel lvm)
{
LogonViewModel lv = new LogonViewModel();
return View();
}
型号:
public class LogonViewModel
{
[Required(ErrorMessage = "User Name is Required")]
public string UserName { get; set; }
}
查看
@model IList<clientval.Models.LogonViewModel>
@{
ViewBag.Title = "Index";
}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="../../assets/js/val.js" type="text/javascript"></script>
@using (Html.BeginForm())
{
for (int i = 0; i < 1; i++)
{
@Html.LabelFor(m => m[i].UserName)
@Html.TextBoxFor(m => m[i].UserName)
@Html.ValidationMessageFor(per => per[i].UserName)
<input type="submit" value="submit" />
}
}
答案 0 :(得分:2)
您的POST控制器操作必须采取集合,因为这是您在视图中的内容:
[HttpPost]
public ActionResult Index(IList<LogonViewModel> lvm)
{
...
}
答案 1 :(得分:1)
您正在视图中生成 - 并提交到服务器 - 多个名称。当您使用TextBoxFor(m => m[5].UserName)
时,MVC将生成<input type=text name="[5].UserName>
。所以你必须在你的控制器中接受 多个名称。
将您的操作签名更改为:
[HttpPost]
public ActionResult Index(LogonViewModel[] lvms)
(并将submit
移出您的for
,无论如何都会提交整个表单。