我提交时将空值传递给控制器​​?

时间:2012-07-28 07:51:54

标签: asp.net-mvc-3

运行后,当我在“用户名”文本框中键入值并单击“提交”按钮时。 在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" />
    }
}

2 个答案:

答案 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,无论如何都会提交整个表单。