asp.net mvc 3 c#post变量数组

我需要将数组传递给POST方法。 但我显然缺少某些东西我的观点看起来像这样:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>        

我的方法声明如下所示:

 [HttpPost] public ActionResult LetsTest(IEnumerable rez) 

当我试图提取数据时,我得到的值不能为空。 我错过了什么?

这里有一些问题:

  1. 您的视图是为Rezultat键入的,但您尝试将该模型视为IEnumerable
  2. 你试图将每个文本框绑定到x[i] – 这相当于Model.x[i] – 当你真正想要的是将它绑定到[i].x (即Model[i].x )时。

所以,要纠正这个问题,你需要改变一些事情。

首先,将视图更改为inheritanceSystem.Web.Mvc.ViewPage> 。 现在,您的视图可以传递IEnumerable ,这是您的控制器操作所期望的。

第二,改变这个:

  

对此:

  

这样做的原因是第一个会尝试将值绑定到Model.x[0] ,这是(或者,一旦你正确键入你的视图),相当于一个实例的属性x中的第一个元素。 IEnumerable 。 这显然不太正确,因为IEnumerable没有公开属性x 。 你想要的是绑定Model[0].x ,它是索引0Rezultat对象的属性x

更好的是,使用帮助器为您生成名称:

 for(int i=0; i < Model.Count; i++) { @Html.TextBoxFor(m => m[i].x) } 

如果你真的想要这样做,你必须使用我认为Form Collection

 [HttpPost] public ActionResult LetsTest(FormCollection collection, IEnumerable rez) { string[] inputs = new string[6]; for(int i=1; i<8; i++) { //get all your array inputs inputs[i-1]=collection["x["+i+"]"] } } 

在这里查看模型绑定到列表。 发布的项目需要采用特定格式才能在POST操作中将其作为列表进行检索。

更改您的视图代码如下:

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>        

更新 :第二个想法,我认为这是你的实际问题,你是从1-7开始,而不是0-6。

谢谢Ant。