2
我遇到了一個問題,試圖將對象數組傳遞給MVC3控制器/操作。我在網上發現了幾個討論(包括在這裏),但沒有一個解決了我的問題。以下是我的工作:將使用jquery.load的對象數組傳遞給MVC 3
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
是編碼versio的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
我也試圖通過包裝的人[]對象內部修改上述:var data = { arr: people }
,然後試圖發送data
對象的各種方法。所有的方式(一個比我手動編碼工作等)導致以下三種結果:
- 沒有所謂的控制器動作(在它是如何定義和錯配我怎麼稱呼它)
- 控制器動作所謂的但參數爲空
- 控制器操作調用,並正確的數組中的對象元素,但沒有從這些對象的實際值傳輸(所以我有一個對象的數組都具有默認值)。
有什麼建議?
你不想通過查詢字符串來傳遞複雜的對象。你想發佈這些參數。 –
戴夫 - 我同意,但正如我解釋(也許很差)是我無法得到這個工作,我不得不訴諸查詢字符串傳遞。你能向我展示/指出一個有效的例子嗎? – Chris
@DaveA說的是正確的,嘗試在帖子中傳遞它。我的建議是創建一個JSON數組並將其作爲字符串發佈到控制器,然後在控制器中對其進行反序列化。如果控制器的行爲沒有被擊中,那麼你可能稱之爲錯誤。例如,你的網址包含#peopleDiv。 – lopezbertoni