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

前端之家收集整理的这篇文章主要介绍了asp.net mvc 3 c#post变量数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要将数组传递给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)
}

猜你在找的asp.Net相关文章