[英]asp.net mvc 3 c# post array of variables
我需要将数组传递给POST方法。 但我显然缺少某些东西我的观点看起来像这样:
<%@ 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
,它是索引0
处的Rezultat
对象的属性x
。
更好的是,使用帮助器为您生成名称:
for(int i=0; i < Model.Count; i++)
{
@Html.TextBoxFor(m => m[i].x)
}
如果你真的想要这样做,你必须使用我认为Form Collection
[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。
谢谢蚂蚁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.