2010-01-25 9 views
1

Je peux publier un objet complexe sur un contrôleur ASP.NET MVC avec jQuery, à condition de modifier la sortie de $ .param() comme this: "Colonne [0] [Nom]" -> "Colonne [0] .Name"Publication d'un objet LINQ-to-SQL complexe sur le contrôleur ASP.NET MVC

Cependant, cela ne fonctionne que si les données sont liées à une propriété de type tableau sur le serveur (Colonnes1 dans l'exemple ci-dessous). Un type de collection comme IEnumerable ou EntitySet utilisé par LINQ-to-SQL ne fonctionne pas. Dois-je simplement définir une propriété de type tableau en écriture seule qui définit la propriété EntitySet sur la liaison, ou existe-t-il une solution plus élégante?

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'); 
    }); 

classes de domaine

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; } 
} 

action contrôleur

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

remplacé remplacer fonction de chaîne() avec replaceAll(), comme on le voit here.

Répondre

0

Voici un exemple du correctif auquel j'ai fait référence dans ma question. Cela fonctionne, mais devrait être mis en œuvre pour toutes les propriétés similaires.

"générés" LINQ to SQL classe de domaine

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

classe partielle avec tableau jQuery Etablissement

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); 
     } 
    } 
} 
Questions connexes