2013-03-28 45 views
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對象的各種方法。所有的方式(一個比我手動編碼工作等)導致以下三種結果:

  1. 沒有所謂的控制器動作(在它是如何定義和錯配我怎麼稱呼它)
  2. 控制器動作所謂的但參數爲空
  3. 控制器操作調用,並正確的數組中的對象元素,但沒有從這些對象的實際值傳輸(所以我有一個對象的數組都具有默認值)。

有什麼建議?

+2

你不想通過查詢字符串來傳遞複雜的對象。你想發佈這些參數。 –

+0

戴夫 - 我同意,但正如我解釋(也許很差)是我無法得到這個工作,我不得不訴諸查詢字符串傳遞。你能向我展示/指出一個有效的例子嗎? – Chris

+0

@DaveA說的是正確的,嘗試在帖子中傳遞它。我的建議是創建一個JSON數組並將其作爲字符串發佈到控制器,然後在控制器中對其進行反序列化。如果控制器的行爲沒有被擊中,那麼你可能稱之爲錯誤。例如,你的網址包含#peopleDiv。 – lopezbertoni

回答

4

剛剛成立的contentType到'application/json'和使用JSON.stringify()

$.ajax({ 
      contentType: 'application/json', 
      type: 'POST', 
      url: '/Controller/AddPerson', 
      data: JSON.stringify({ 
       people: [ 
        { 
         ReadOnly: false, 
         Name: 'Cristi' 
        }, 
        { 
         ReadOnly: true, 
         Name: 'Matt' 
        } 
       ] 
      }), 
      success: function (data) { 
       $("#peopleDiv").html(data); 
      }, 
      error: function() { 
       console.trace(); 
      } 
     }); 

此外,添加/編輯/刪除請求應通過POST完成。

[HttpPost] 
public ActionResult AddPerson(List<Person> people) 
{ 
    if (null != people) 
    { 
     foreach (var person in people) 
     { 
      Debug.WriteLine(person); 
     } 
    } 
    return PartialView("viewname"); 
} 
相關問題