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.