2012-09-07 120 views
0

'myArray'數組如何傳遞給mvc控制器?我嘗試了一切,但我似乎無法得到任何工作將jquery數組傳遞給asp.net mvc控制器

控制器

[HttpPost] 
public ActionResult MyAction(MyModel model, List<string> myArray) { 
    //code... 
} 

查看

$('#dialog').dialog({ 
     //... 
     buttons: { 
      "Cancel": function() { 
       $(this).dialog("close"); 
      }, 
      "Submit": function() { 
       var arrCount= 0; 
       var myArray = new Array(); 

       //grabs all the dropdownlists that begin with id 'dropdownlist' and adds it to 'myArray' 
       $('form').contents().find("select[id ^= 'dropdownlist'] option:selected").each(function() { 
        myArray[arrCount++] = $(this).text(); 
       }); 

       if ($('form').validate().form()) { 
        $.ajax({ 
         url: "MyController/MyAction", 
         type: 'POST', 
         dataType: "json", 
         traditional: true, 
         data: { 
          model: $("form").serialize(), 
          myArray: myArray 
         }, 
         success: function (result) { 
          alert("debug: complete"); 
         } 
        }); 
       } 
      } 
     } 
    }); 

我知道如何在陣列中自行傳遞到控制器。但是,一旦我將現有的模型添加到等式中,我不確定如何將數組傳遞給控制器​​。有什麼想法嗎?

+0

模型是否得到正確發佈? –

+0

不,模型在控制器上返回null – theStig

回答

0

首先,簡單的解決方案是:

使數組值的字符串與一些隔板,

1 ## 2 ## 3 ...或1,2,3。 。等

,並使用

public ActionResult MyAction(MyModel model, string myArray) { 
    string[] values = myArray.Split("##"); //split incoming string with your separator 

    List<int> myIntArray = new List<int>(); 
    foreach (var value in values) 
    { 
     int tmp = 0; 
     if (int.TryParse(value, out tmp)) 
     { 
      myIntArray.Add(tmp); 
     } 
    } 

    //code... 
} 

工作好簡單的事情。

第二種方法稍微複雜一些,但適用於對象。

假設你有以下幾點:

public class YourMainModel 
{ 
    public YourMainModel() 
    { 
     ArrayField = new List<YourPartialModel>() 
    } 

    List<YourPartialModel> ArrayField {get; set;} 

    //some other fields 
} 

public class YourPartialModel 
{ 
    public string Name {get; set;} 

    //some other fields 
} 

使用某種枚舉在視圖中進行如下:

<form id="myForm"> 

//some other fields from YourMainModel here 

//dealing with our array 
@for (int i = 0; i < Model.ArrayField.Count(); i++) 
{ 
    @Html.TextBox("ArrayField[" + i + "].Name", Model.ArrayField[i].Name) 

    //some other fields from YourPartialModel here 
} 

</form> 

然後

[HttpPost] 
public ActionResult MyAction(YourMainModel model) { 
    //use model.ArrayFields here, it should be submitted 
} 
相關問題