asp.net mvc 3 c# post array of variables

后端 未结 4 976
我在风中等你
我在风中等你 2020-12-11 18:43

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         


        
相关标签:
4条回答
  • 2020-12-11 19:11

    There are a couple of things wrong here:

    1. Your view is typed to Rezultat but you're trying to treat the model as an IEnumerable<Rezultat>.
    2. You're trying to bind each textbox to 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)
    }
    
    0 讨论(0)
  • 2020-12-11 19:19

    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.

    0 讨论(0)
  • 2020-12-11 19:33

    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+"]"]
       }
    
    }
    
    0 讨论(0)
  • 2020-12-11 19:36

    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.

    0 讨论(0)
提交回复
热议问题