2016-03-24 10 views
1

私はVS2015、MVC5を使用しています。 私は、フォームを送信:オブジェクトの配列をmvcコントローラに隠しフィールド値として渡します

 @using (Html.BeginForm("Test", "Home", FormMethod.Post)) 
    { 
     <input name="celo" type="hidden" value="994" /> 
     <input name="pispis" type="hidden" value="Došel je prošel pisani Vuzem!" /> 
     <input name="userji" type="hidden" 
      value="[{'ID':1,'Name':'John','TotalPayed':0,'TotalDebt':0}, 
       {'ID':2,'Name':'George','TotalPayed':0,'TotalDebt':0}, 
       {'ID':3,'Name':'Simon','TotalPayed':0,'TotalDebt':0}, 
       {'ID':4,'Name':'Antonio','TotalPayed':0,'TotalDebt':0}]" /> 
     <input type="submit" value="Submit test"/> 
    } 

コントローラー:

public void Test(int celo, string pispis, List<User> userji) 
    { 

    } 

クラスユーザー:

public class User 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int TotalPayed { get; set; } 
    public int TotalDebt { get; set; }   
} 

値 'CELO' と 'pispisは' 正しく転送されます。私はオブジェクト 'userji'の配列に問題があります - コントローラではnullです。送信フォームを使用してオブジェクトの配列をコントローラに渡す方法はありますか?

+0

あなたがすることはできません。コレクションの各項目の入力を作成する必要があります( 'for'ループや' User'の型に対するカスタム 'EditorTemplate'を使います)。しかし、たくさんのデータをクライアントに送り、それをすべて送信する点は何ですか? POSTメソッドで必要な場合には、再度データを取得してください。 –

+0

オブジェクトの配列はクライアント上で動的に作成されます。その配列をサーバーに渡したいのですか? – FrenkyB

+0

POSTの方法あなたが必要とするメソッドは、 '、' 'などです。 –

答えて

2

@FrenkyBバインディングを文字列に変更して、このようなリストにダイジェストすることができます。

public void Test(int celo, string pispis, string userji) 
{ 
    var myList = JsonConvert.DeserializeObject<List<User>>(userji); 

    //stuff 
} 
+0

また、人々がコメントしたように、ループなどでそれぞれの入力を作成することもできます。これは、現在のjson入力を受け取り、素早くリストに変換する方法です。 –

1

あなたが求めていることを知っている唯一の方法は、ちょっとしたカンニングです。私が過去に行ったやり方は、文字列として渡し、コントローラー側のJSONとしてデータを解析することです。

+0

これは動作します...コントローラに文字列が来ます。その文字列が何らかの形でリストに転送されれば理想的でしょう。そうでなければ、良い点です。つまり、リストには既にというコントローラーがあります。 – FrenkyB

2
@using (Html.BeginForm("Test", "Home", FormMethod.Post)) 
{ 
    var users = new List<User> 
    { 
     new User { Name = "John", TotalPayed = 0, TotalDebt = 0 }, 
     new User { Name = "George", TotalPayed = 0, TotalDebt = 0 }, 
     new User { Name = "Simon", TotalPayed = 0, TotalDebt = 0 }, 
     new User { Name = "Antonio", TotalPayed = 0, TotalDebt = 0 } 
    }; 

    <input name="celo" type="hidden" value="994" /> 
    <input name="pispis" type="hidden" value="Došel je prošel pisani Vuzem!" /> 

    @for(int i = 0; i < users.Count; i++) 
    { 
     var user = users[i]; 

     <input name="userji[@i].Name" type="hidden" value="@user.Name" /> 
     <input name="userji[@i].TotalPayed" type="hidden" value="@user.TotalPlayed" /> 
     <input name="userji[@i].TotalDebt" type="hidden" value="@user.TotalDebt" /> 
    } 

    <input type="submit" value="Submit test"/> 
} 
関連する問題