微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐