Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 将复杂的LINQ to SQL对象发布到ASP.NET MVC控制器_Jquery_Asp.net Mvc_Linq To Sql - Fatal编程技术网

Jquery 将复杂的LINQ to SQL对象发布到ASP.NET MVC控制器

Jquery 将复杂的LINQ to SQL对象发布到ASP.NET MVC控制器,jquery,asp.net-mvc,linq-to-sql,Jquery,Asp.net Mvc,Linq To Sql,我可以使用jQuery将复杂对象发布到ASP.NET MVC控制器,只要我修改$.param()的输出,如下所示:“Column[0][Name]”->“Column[0].Name” 但是,仅当数据绑定到服务器上的数组类型属性(下例中的列1)时,此操作才有效。像IEnumerable或LINQ to SQL使用的EntitySet这样的集合类型不起作用 我应该简单地定义一个只写的数组类型属性来设置绑定上的EntitySet属性,还是有更优雅的解决方案 JavaScript var column

我可以使用jQuery将复杂对象发布到ASP.NET MVC控制器,只要我修改$.param()的输出,如下所示:“Column[0][Name]”->“Column[0].Name”

但是,仅当数据绑定到服务器上的数组类型属性(下例中的列1)时,此操作才有效。像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 partial class Table
{
    public string Name { get; set; }
    public EntitySet<Column> Columns { get; set; }
}

编辑
将replace()字符串函数替换为replaceAll(),如图所示。

以下是我在问题中提到的修复示例。它可以工作,但需要为所有类似的属性实现

已“生成”LINQ到SQL域类

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 partial class Table
{
    public string Name { get; set; }
    public EntitySet<Column> Columns { get; set; }
}
公共部分类表
{
公共字符串名称{get;set;}
公共EntitySet列{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 );
        }
    }
}
公共部分类表
{
公共栏目
{
收到
{
//ASP.NET MVC在所有绑定属性中都需要一个getter,但在本例中不使用返回值
返回null;
}
设置
{ 
Columns=新的EntitySet();
Columns.AddRange(值);
}
}
}