我需要将数组传递给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)
当我尝试提取数据时,我得到的值不能为null。
我想念的是什么?
最佳答案
这里有几处错误:
Rezultat
,但是您试图将模型视为IEnumerable<Rezultat>
。 x[i]
(即Model.x[i]
)时,您正在尝试将每个文本框绑定(bind)到[i].x
-等效于Model[i].x
。 因此,要纠正此问题,您需要更改几件事。
首先,将您的 View 更改为继承
System.Web.Mvc.ViewPage<IEnumerable<Klausimynas.Models.Rezultat>>
。现在,您的 View 可以传递IEnumerable<Rezultat>
,这是您的 Controller Action 所期望的。其次,更改此:
<input type="text" name="x[0]">
对此:
<input type="text" name="[0].x">
这样做的原因是,第一个将尝试将值绑定(bind)到
Model.x[0]
,即(或将在您正确键入 View 后将其绑定(bind))等效于x
实例的属性IEnumerable<Rezultat>
中的第一个元素。这显然是不对的,因为IEnumerable
没有公开x
属性。您想要的是绑定(bind)Model[0].x
,它是x
对象在索引Rezultat
处的属性0
。更好的是,使用帮助程序为您生成名称:
for(int i=0; i < Model.Count; i++)
{
@Html.TextBoxFor(m => m[i].x)
}