我可以使用jQuery将复杂对象发布到ASP.NET MVC控制器,只要我修改$ .param()的输出,如下所示:“Column [0] [Name]” - > “列[0]请将.Name”
但是,这仅在数据绑定到服务器上的数组类型属性(下例中的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
}
将replace()字符串函数替换为replaceAll(),如here所示。
答案 0 :(得分:0)
以下是我在问题中提到的修复示例。它可以工作,但需要为所有类似的属性实现。
“生成的”LINQ-to-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 );
}
}
}