2010-01-25 87 views
1

我可以使用jQuery將複雜對象發佈到ASP.NET MVC控制器,只要修改$ .param()的輸出就像這:「Column [0] [Name]」 - >「Column [0] .Name」將複雜的LINQ-to-SQL對象發佈到ASP.NET MVC控制器

但是,這隻適用於數據綁定到服務器上的數組類型屬性(下面示例中的Columns1 )。像IEnumerable這樣的集合類型或LINQ-to-SQL使用的EntitySet不起作用。

我應該簡單地定義一個只寫的數組類型屬性來設置綁定的EntitySet屬性,還是有更優雅的解決方案?

的JavaScript

var columns = 
[ 
    { Name: 'Alpha', Width: 50 }, 
    { Name: 'Bravo', Width: 100 }, 
    { Name: 'Charlie', Width: 75 } 
]; 

var params = $.param(
{ 
    Name: 'MyTable', 
    Columns1: columns, 
    Columns2: columns, 
    Columns3: columns 
}); 

params = params.replaceAll('%5BName%5D=', '%2EName='); 
params = params.replaceAll('%5BWidth%5D=', '%2EWidth='); 

$.post($.getUrl('/MyController/CreateTable/'), 
    params, 
    function() 
    { 
     $.log('done'); 
    }); 

域類

public class Table 
{ 
    public string Name { get; set; } 
    public Column[] Columns1 { get; set; } 
    public IEnumerable<Column> Columns2 { get; set; } 
    public EntitySet<Column> Columns3 { get; set; } 
} 

public class Column 
{ 
    public string Name { get; set; } 
    public int Width { get; set; } 
} 

控制器動作

public ActionResult CreateTable(Table table) 
{ 
    // table.Columns1 contains a list of three Columns, with Name and Width set properly 
    // table.Columns2 and table.Columns3 both contain three Column objects, but Name and Width are null/0 
} 


EDIT

替換替換的replaceAll()()字符串函數,如圖here

回答

0

下面是我在問題中提到的修復的一個示例。它可以工作,但需要爲所有類似的屬性實施。

「生成」 LINQ到SQL域類

public partial class Table 
{ 
    public string Name { get; set; } 
    public EntitySet<Column> Columns { get; set; } 
} 

局部類與jQuery友好的數組屬性

public partial class Table 
{ 
    public Column[] ColumnsIn 
    { 
     get 
     { 
      // ASP.NET MVC requires a getter in all bound properties, but the returned value isn't used in this case 
      return null; 
     } 
     set 
     { 
      Columns = new EntitySet <Column>(); 
      Columns.AddRange (value); 
     } 
    } 
} 
相關問題