I need to pass array to POST method. But i'm obviously missing sometging My view look something like this:
<%@ 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]">
My method declaration looks like this:
[HttpPost]
public ActionResult LetsTest(IEnumerable<Rezultat> rez)
and when i'm trying to extract data i'm getting Value can't be null. What i'm missing?
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)
}
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+"]"]
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With