2010-06-10 189 views
1

我有一個模型,我正在使用ajax.post。我可以看到模型綁定不是爲我的模型中的數組列表完成的,儘管爲int或字符串類型的屬性進行了綁定。爲什麼?我的代碼如下。模型綁定難度

我有以下特性

public class ProjectModel 
{ 
    public int ID { get; set; } 
    public ArrayList Boys= new ArrayList(); 

}

在我看來,我有

$(document).ready(function() { 
    var project = new Object(); 
     var Boys= new Array(); 
var ID; 
....... 
ID = $('#ID').val(); 
project.Boys= Boys; 

模型.....

$.ajax({ 
       type: "POST", 
       url: '<%=Url.Action("Create","Project") %>', 
       data: JSON.stringify(project), 
       contentType: "application/json; charset=utf-8", 
       dataType: "html", 
       success: function() { 
       }, 
       error: function (request, status, error) { 
             } 
      }); 

//

我控制器

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(ProjectModel project) 
    { 
     try 
     { 
      project.CreateProject(); 
      return RedirectToAction("Index"); 
     } 

....

+1

'ArrayList'不是通用的。你打算存儲什麼類型的對象?在這裏需要定義'Boy'類型的每個屬性時,通用'List '或'Boy []'會更合適。 – 2010-06-10 09:44:56

+0

你能用一個例子來解釋一下嗎?我正在填充視圖中的數組,並希望有一個模型綁定。 實際上,我可以看到從視圖發送的值沒有綁定到模型,並且數組仍然具有已經實例化的值。我怎麼解決這個問題? – learning 2010-06-10 10:21:13

回答

1

的ModelBinding使用的名稱進行。 對於要被綁定任何集合,它必須具有以下格式:

project.property1 
project.property2 

和男孩集合

project.Boys[0].property1 
project.Boys[0].property2 

project.Boys[1].property1 
project.Boys[1].property2 

如果您使用的一種形式,你可以正確設置名稱的投入和使用jquery:

//inside the ajax definition 
    data: $('#formID').serialize(), 

編輯:如果男孩沒有屬性,然後名稱應爲:

project.Boys[0] 
project.Boys[1] 
project.Boys[2] 

你試過綁定第二個參數嗎?

public ActionResult Create(ProjectModel project, string[] Boys) 

我沒有使用ArratList,因爲我做了一些測試,它似乎並不在所有綁定,我更喜歡使用一個正常的數組聲明。

你可以嘗試的另一件事是檢查FormCollection

public ActionResult Create(FormCollection f) 

把一個斷點剛剛開始,檢查值,如果名稱中不遵循它永遠不會綁定格式project.Boys。

EDIT2:如果您要綁定到多個陣列,然後只需添加一個集合定義到模型:

public class ProjectModel 

    { 
     public IEnumerable<string[]> Boys { get; set; } 
    } 

和名稱應該是: 第一個數組:

project.Boys[0] 
project.Boys[0] 

第二個:

project.Boys[1] 
project.Boys[1] 

。 。 。

但爲了歸檔這個JavaScript中的男孩的定義應該是一個合作的集合,以及即時通訊不知道如何在js中定義。

PD:如果要手動推值的數組和值來自於輸入,你的國家,在這裏Boys.Push($('#tex1').val()),那麼你應該能夠序列化的輸入和保存你的麻煩很多= d。 即:模擬你的情況這會是這樣的......

<% using (Html.BeginForm()) 
     { %> 
     <% var i1 = 5; %> 
     <% var i2 = 5; %> 
     <% for(var i=0; i < i1; i++) 
      { %> 
      <% for (var ix = 0; ix < i2; ix++) 
      {%> 
      <input name="boys[<%=i %>]" value="VALUE_HERE"/> 
      <%} %> 
     <%} %> 
     <input type="submit" value="sumit" /> 
    <%} %> 

,做data: $('#formID').serialize()給出相同的結果作爲創建project JS對象,然後做JSON.stringify(project)

+0

男孩只是一個數組列表,我將數組填充爲Boys.Push($('#tex1')。val()),它沒有任何屬性。 – learning 2010-06-11 05:31:12

+0

@user Omar說你不能使用ArrayList w/model綁定。如果你只是想要一個字符串列表(這是它看起來像我),那麼你可以發送一個逗號分隔的字符串和分裂它的服務器端。 – Ryan 2010-06-11 21:22:42

+0

感謝奧馬爾,我仍然有困難。實際上,我必須使用javascript來模擬數組綁定,而困難的部分是我有5 - 6個數組,我不知道如何繼續。 – learning 2010-06-14 10:12:03