1

运行后,当我在用户名文本框中输入值并单击提交按钮时。在控制器中,我检查对象显示的空值......如果我删除 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" />
    }
}
4

2 回答 2

2

您的 POST 控制器操作必须进行集合,因为这就是您在视图中所拥有的:

[HttpPost]
public ActionResult Index(IList<LogonViewModel> lvm)
{
    ...
}
于 2012-07-28T07:58:03.273 回答
1

您在您的视图中生成 - 并提交到服务器 -多个名称。当你使用TextBoxFor(m => m[5].UserName)MVC 时会生成<input type=text name="[5].UserName>. 因此,您也必须在控制器中接受多个名称。

将您的操作签名更改为:

[HttpPost]
public ActionResult Index(LogonViewModel[] lvms)

(并将您submit移出您的for,无论如何它都会提交整个表单)

于 2012-07-28T07:57:43.327 回答