我需要传递数组POST方法。 但我显然缺少sometging我的观点是这个样子:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Klausimynas.Models.Rezultat>" %>
<input type="text" name="x[1]">
<input type="text" name="x[2]">
<input type="text" name="x[3]">
<input type="text" name="x[4]">
<input type="text" name="x[5]">
<input type="text" name="x[6]">
<input type="text" name="x[7]">
我的方法声明如下所示:
[HttpPost]
public ActionResult LetsTest(IEnumerable<Rezultat> rez)
当我试图提取数据,我得到的价值不能为空。 什么我失踪?
有几件事情错在这里:
- 您的观点是输入到
Rezultat
但你试图把该模型作为IEnumerable<Rezultat>
- 你试图给每个文本框结合
x[i]
-这将等同于Model.x[i]
-当你真正想要的是将其绑定到[i].x
(即Model[i].x
) 。
因此,要解决这个问题,你需要改变一些事情。
首先,改变你的看法继承System.Web.Mvc.ViewPage<IEnumerable<Klausimynas.Models.Rezultat>>
。 现在,您的视图可以传递IEnumerable<Rezultat>
这是你的控制器动作需要什么。
其次,改变这种:
<input type="text" name="x[0]">
为此:
<input type="text" name="[0].x">
这样做的原因是,首先会尝试将值绑定Model.x[0]
这是(或将是,一旦你正确输入你的看法),相当于第一元素属性x
的实例IEnumerable<Rezultat>
。 这显然是不完全正确,作为一个IEnumerable
不公开任何财产x
。 你想要的是绑定Model[0].x
,这是属性x
的的Rezultat
对象的索引0
。
更妙的是,使用一个辅助来为你生成的名字:
for(int i=0; i < Model.Count; i++)
{
@Html.TextBoxFor(m => m[i].x)
}
如果你真的wnat以这种方式做到这一点,你必须使用我想收集表格
[HttpPost]
public ActionResult LetsTest(FormCollection collection, IEnumerable<Rezultat> 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<Klausimynas.Models.Rezultat>" %>
<input type="text" name="x[0]" />
<input type="text" name="x[1]" />
<input type="text" name="x[2]" />
<input type="text" name="x[3]" />
<input type="text" name="x[4]" />
<input type="text" name="x[5]" />
<input type="text" name="x[6]" />
更新 :在第二的想法,我认为这是你的实际问题,你是从1-7开始,而不是0-6。
由于蚂蚁。