我需要将数组传递给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) }