2010-01-25 82 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); 
     } 
    } 
} 
相关问题