我需要将数组传递给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。
我想念的是什么?

最佳答案

这里有几处错误:

  • 您的 View 被键入Rezultat,但是您试图将模型视为IEnumerable<Rezultat>
  • 当您真正想要将文本框绑定(bind)到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)
    }
    

    10-01 19:34