オブジェクトの配列を MVC3 コントローラー/アクションに渡そうとすると、問題が発生しました。私はウェブ上でいくつかの議論を見つけました (ここ SO を含む) が、どれも私の問題を解決していません。これが私が取り組んでいるものです:
public class Person
{
public Guid TempId { get; set; }
public bool ReadOnly { get; set; }
[Required(ErrorMessage = "Required")]
public string Name { get; set; }
}
これが私のコントローラーアクションです(現在、私は多くのバリエーションを試しました)。
[HttpGet]
public ActionResult AddPerson(List<Person> people)
{
if (null != people)
{
foreach (var person in people)
{
Debug.WriteLine(person );
}
}
return View();
}
行動を促すために jquery を構造化するさまざまな方法を試しましたが、これまでのところ、次のようにオブジェクトの配列を URL 文字列に手動でエンコードする方法しかありません。
var url = "AddPerson?people%5B0%5D.TempId=9FBC6EF8-67DB-4AB4-8FCE-5DFC0F2A69F9&people%5B0%5D.ReadOnly=true&people%5B0%5D.Name=Bob+Jones&people%5B1%5D.TempId=9FBC6EF8-67DB-4AB4-8FCE-5DFC0F2A6333&people%5B1%5D.ReadOnly=false&people%5B1%5D.Name=Mary+Jones #peopleDiv";
$("#peopleDiv").load(url, updatePeopleDiv);
のpeople%5B1%5D.ReadOnly=false
エンコードされたバージョンです。people[1].ReadOnly=false
私は次のような他のことを試しました:
var url = "AddPerson #peopleDiv";
var people = [];
people.push({'[0].TempId': '<valid guid>', '[0].ReadOnly': true, '[0].Name': 'Bob Jones' });
$("#peopleDiv").load(url, people, updatePeopleDiv); // nope
$("#peopleDiv").load(url, $.param(people, false), updatePeopleDiv); // nada
$("#peopleDiv").load(url, $.param(people, true), updatePeopleDiv); // nyet
また、その people[] をオブジェクト内にラップして、上記を変更してみました:var data = { arr: people }
そして、そのdata
オブジェクトをさまざまな方法で送信しようとしました。すべての方法 (手動でエンコードして動作するようになった方法を除く) は、次の 3 つの結果のいずれかになります。
- コントローラーアクションが呼び出されていません (定義方法と呼び出し方法が一致しません)
- コントローラー アクションが呼び出されましたが、パラメーターが null です
- コントローラーアクションが呼び出され、配列内の正しい数のオブジェクト要素が転送されますが、これらのオブジェクトからの実際の値は転送されません (したがって、すべてデフォルト値を持つオブジェクトの配列があります)。
助言がありますか?