2

だから私はリスト(整数の)パラメータを持つasp.net mvcアクションに投稿している数字の配列を持っていて、それはすべてうまくいきます。
私の質問はこれです:

リスト(整数の)には、私が投稿した配列と同じ順序で数字が含まれると想定しても安全ですか?

御時間ありがとうございます!

編集:

投稿されるデータは次のようになります。

POSTDATA=model.LevelIds=6&model.LevelIds=19&model.LevelIds=16&model.LevelIds=21&model.LevelIds=18

改ざんデータ Firefox アドオンを使用して確認しています。

従来のモードでjQueryを使用しています。

編集:

アクションは次のようになります。

public function Create(byval model as thecreateviewmodel) as actionresult

thecreatviewmodel にはたくさんのプロパティがありますが、興味深いのは...

Public Property LevelIdsAs IList(Of Integer) = New List(Of Integer)

クライアント側では、ビュー モデルは javascript/jquery で構築されます。

function NewEntityDataBuilder() {
    var theData = { 
        'model.Name' : $('#Name').val(),
        'model.Description' : $('#Description').val(),
        'model.LevelIds' : $('#LevelIds').val()
    };
    return theData;
}

その関数は、この JavaScript のビットから呼び出され、基本的にリスト内のすべてのものをドロップダウン リスト (選択コントロール) に追加し、それらすべてを選択します。

$('#LevelIds').empty();
$('#AddedLevels').children().each(function () {
$('#LevelIds').append("<option value='" + $(this).attr('LevelId') + "'>" + $(this).attr('LevelId') + "</option>");
        });

$('#LevelIds').children().attr('selected', 'selected');  //select all the options so they get posted.

var dataToPost = NewEntityDataBuilder();   

このように説明するとかなり複雑に見えますが、実際にはかなり単純です。これはすべて、フォームの一部である 2 つの接続されたドラッグ アンド ドロップ リストの一部です。

したがって、変数ですべてのオプションが選択された選択リストの値を入力し、それを (整数の) ilist に投稿すると、選択したときと同じ順序で ilist に表示されます。彼らのようです。しかし、それは単なる偶然ですか?

4

1 に答える 1

0

通常、インデックスはパラメーター名の一部です。

ints[0]=0&ints[2]=2&ints[1]=1

そして、次のようなコントローラー アクションがあるとします。

public ActionResult Index(List<int> ints)
{
    // ints[0] = 0
    // ints[1] = 1
    // ints[2] = 2
    return View();
}

アップデート:

クエリ文字列に同じ名前の複数のパラメーターがあるとします。このクエリ文字列は、ネイティブのHttpRequestオブジェクトによって ASP.NET エンジンによって解析され、 NameValueCollectionに変換されます。より正確には、 と呼ばれるカスタム実装に変換されHttpValueCollectionます。このクラスは ASP.NET の内部にあるため、文書化されておらず、.NET のバージョンによって変更される可能性があります。Reflector でそれを見るFillFromStringと、それが実装されている方法があり、順序が保持されているようです。しかし、これは私が頼りにしたくないものです。

于 2010-06-25T08:27:28.427 に答える