I need to pass array to POST method. But i\'m obviously missing sometging My view look something like this:
<%@ Page Title=\"\" Language=\"C#\" MasterPage
There are a couple of things wrong here:
Rezultat
but you're trying to treat the model as an IEnumerable<Rezultat>
.x[i]
- which would be equivalent to Model.x[i]
- when what you really want is to bind it to [i].x
(i.e. Model[i].x
).So, to correct this, you need to change a couple of things.
First, change your view to inherit System.Web.Mvc.ViewPage<IEnumerable<Klausimynas.Models.Rezultat>>
. Now your view can pass an IEnumerable<Rezultat>
, which is what your controller action expects.
Second, change this:
<input type="text" name="x[0]">
To this:
<input type="text" name="[0].x">
The reason for this is that the first will attempt to bind the value to Model.x[0]
, which is (or will be, once you've typed your view properly) equivalent to the first element in property x
of an instance of IEnumerable<Rezultat>
. This obviously isn't quite right, as an IEnumerable
exposes no property x
. What you want is to bind Model[0].x
, which is the property x
of the Rezultat
object at index 0
.
Better still, use a helper to generate the name for you:
for(int i=0; i < Model.Count; i++)
{
@Html.TextBoxFor(m => m[i].x)
}
Check out model binding to a list here. Items posted needs to be in certain format to be able to retrieve them as list in POST action.
if you really wnat to do it this way you have to use I think Form Collection
[HttpPost]
public ActionResult LetsTest(FormCollection collection, IEnumerable<Rezultat> rez)
{
string[] inputs = new string[6];
for(int i=1; i<8; i++)
{
//get all your array inputs
inputs[i-1]=collection["x["+i+"]"]
}
}
Change your view code as follows:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Klausimynas.Models.Rezultat>" %>
<input type="text" name="x[0]" />
<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]" />
Update: On 2nd thoughts, I think this is your actual problem, you are starting from 1-7, rather than 0-6.
Thanks Ant.