2012-05-24 2 views
0

j'ai un JSON qui est la suivante:LINQ et JSON, type anonyme ne peut pas avoir des propriétés multiples avec le même nom

 var jsonData = new 
     { 
      total = totalPages, 
      page = page, 
      records = totalRecords, 
      rows = reservations.Select(x => new { x.ReservationId, x.Employee.Name,roomName = x.Room.Name, x.Date, x.StartTime, x.EndTime, x.Notes}).ToList() 
       .Select(x => new 
       { 
        id = x.ReservationId, 
        cell = new string[] 
        { 
        roomName, 
        x.Name, 
        x.Date.ToString().Split(' ')[0], 
        x.StartTime.ToString().Remove(5) +" - " +x.EndTime.ToString().Remove(5), 
        x.Notes, 
        String.Format("<input type=\"button\" value=\"DETAILS\" onclick=\"window.location.href='/Reservation/Details/{0}'\"/>&nbsp &nbsp<input type=\"button\" value=\"EDIT\" onclick=\"window.location.href='/Reservation/Edit/{0}'\"/>&nbsp &nbsp<input type=\"button\" value=\"DELETE\" onclick=\"window.location.href='/Reservation/Delete/{0}'\"/>", x.ReservationId), 
        } 
       }).ToArray(), 
     }; 

cette JSON sera retourné à un jqGrid. Lorsque j'ai tapé x.Room.Name dans la première instruction select, une erreur s'est produite car une propriété portant le même nom existe déjà (par exemple, x.Employee.Name).

alors j'ai essayé "roomName = x.Room.Name" et j'ai mis roomName dans le contenu de la cellule. Cependant, lorsque le json est renvoyé à mon jqGrid, la colonne, qui contient soi-disant le nom de pièce, est vide. comment pourrais-je montrer les valeurs de x.Room.Name d'autres façons?

+0

Prise de vue dans l'obscurité, mais peut-être cela fonctionnerait? x => new {x.ReservationId, new {x.Employee.Name}, new {x.Room.Name}} – McGarnagle

+0

probablement vous avez utilisé Entity Framework et avez oublié d'utiliser 'Include' pour remplir la partie' Room' (voir [ici] (http://msdn.microsoft.com/en-us/library/bb896272.aspx#sectionSection0) par exemple)? – Oleg

Répondre

1

Puisque vous avez renommé la colonne à roomName assurez-vous que sur le client que vous avez une colonne correspondante:

$('#grid').jqGrid({ 
    colNames: [ 'roomName', 'Name', ..... other columns ], 
    colModel: [ 
     { name: 'roomName', index: 'roomName' }, 
     { name: 'Name', index: 'Name' }, 
     ..... 
    ], 
    ........ 
}); 
+0

Les données de la ligne seront utilisées comme 'cell = new string []'. Une publication de données sans nom pour la ligne de données. Donc, je pense que le nom de colonne n'est pas l'origine du problème que ** eaon21 ** a. Je suppose que la réponse JSON du serveur a déjà la colonne 'roomName' vide. – Oleg

Questions connexes