asp.net mvc 3 c#post变量数组

Jus*_*tis 5 c# asp.net asp.net-mvc-3

我需要将数组传递给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]">
Run Code Online (Sandbox Code Playgroud)

我的方法声明如下所示:

[HttpPost]
public ActionResult LetsTest(IEnumerable<Rezultat> rez)
Run Code Online (Sandbox Code Playgroud)

当我试图提取数据时,我得到的值不能为空.我错过了什么?

Ant*_*t P 6

这里有一些问题:

  1. 您的视图已输入,Rezultat但您尝试将模型视为一个IEnumerable<Rezultat>.
  2. 您正试图将每个文本框绑定到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]">
Run Code Online (Sandbox Code Playgroud)

对此:

<input type="text" name="[0].x">
Run Code Online (Sandbox Code Playgroud)

这样做的原因是第一个将尝试将值绑定到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)
}
Run Code Online (Sandbox Code Playgroud)


Sun*_*nny 0

在此处查看模型绑定到列表。发布的项目需要采用某种格式才能在 POST 操作中将其作为列表检索。