0

私のバックグラウンドは主にPHPであるため、フォームでディープ配列を非常に簡単に使用できることに慣れています。私が必要としているのは、次のc#/MVC相当です。

<input type="text" name="data[0][index_name][0]">
<input type="text" name="data[0][index_name][1]">
<input type="text" name="data[1][index_name][0]">
<input type="text" name="data[1][index_name][1]">
<input type="text" name="data[2][index_name][0][something_else]">
<input type="text" name="data[2][index_name][0]">
<input type="text" name="data[2][index_name][1]">

これらは、phpでこの方法でアクセスできます...

$_POST['data'][0]['index_name'][0];
$_POST['data'][0]['index_name'][1];
$_POST['data'][1]['index_name'][0];
$_POST['data'][1]['index_name'][1];
$_POST['data'][2]['index_name'][0]['something_else'];
$_POST['data'][2]['index_name'][0];
$_POST['data'][2]['index_name'][1];

受け取ったformColletionオブジェクトを確認/ループしてみましたが、キーは「data [2] [index_name] [0] [something_else]」などの名前属性文字列であり、深さはありません。データ。

このデータを解析して、使用可能なデータ型を入力するにはどうすればよいですか?フロントエンドでフォームが動的に変化するため、配列の深さがわかりません。

したがって、ある程度のコンテキストがあります。これは、柔軟な数の行と列を持つデータの「テーブル」を構築するために使用され、各行は標準の行またはグループ化行(他の行を含むことを意味します)として扱うことができます。理論的には、データは非常に深くなる可能性があります。

ちなみに、クライアント側でデータをクリーンアップすることも考えましたが、これをサポートする標準はないようです。Jquery.serializeとJQuery.serializeArray()は、C#/ MVCと同じことを行い、配列インデックスを考慮せずに、フルネーム属性ですべてにインデックスを付けるだけです。

助けてくれてありがとう!

4

2 に答える 2

1

深い側面についてはよくわかりませんが、同じ名前のアイテムを投稿すると、MVCはこれを配列として再構築します。

<input type="hidden" name="MyArray" value="1"/>
<input type="hidden" name="MyArray" value="2"/>
<input type="hidden" name="MyArray" value="3"/>
<input type="hidden" name="MyArray" value="4"/>

そしてあなたのコントローラーで

[HttpPost]
public ActionResult MyActionMethod(string[] MyArray)
{
  // Do stuff with MyArray
}

Request.Formコントローラのコレクションにアクセスすることもできます。キーは、HTMLフォームの入力の名前部分からのものです。

次のようにアクセスできます。

Request.Form["data[2][index_name][0][something_else]"]

または、次のように繰り返します。

[HttpPost]
public ActionResult MyActionMethod()
{
  foreach(var key in Request.Form.Keys)
  {
    var item = Request.Form[key];
    // Do stuff with each item
  }
}
于 2012-09-11T14:01:17.543 に答える
0

モデルバインディングが正しい解決策であることが判明しました。箱から出してすぐに再帰をサポートします。ここに素晴らしい記事があります:http: //msdn.microsoft.com/en-us/magazine/hh781022.aspx

于 2012-09-13T18:13:20.433 に答える