2016-03-21 4 views
0

Ich bin in der Lage, eine Liste von Controller unten an Ansicht zurückzukehren:Wie man Json mit einer Liste von anderen Klassen zurückgibt?

public ActionResult FillSegment(int siteid) 
{ 
    var segment = db.Segment.Where(c => c.SiteID == siteid).Select(x => new 
    { 
     SegmentID = x.SegmentID, 
     SegmentName = x.SegmentName 
    }); 
    return Json(segment, JsonRequestBehavior.AllowGet); 
} 

Aber wenn ich die Abfrageoperation in anderen Klassen tun will, und ich rufe die Klasse von FillSegment Aktion, wie sollte es zurückgeben?

Controller:

public ActionResult FillSegment(int siteid) 
{ 
    SegmentHelper segmenthelper = new SegmentHelper();  
    return Json(segmenthelper.FillSegment(siteid), JsonRequestBehavior.AllowGet); 
} 

segmenthelper Klasse:

public List<string> FillSegment(int siteid) 
{ 
    using (DBConnection db = new DBConnection()) 
    { 
     var segment = db.Segment.Where(c => c.SiteID == siteid).Select(x => new 
     { 
      SegmentID = x.SegmentID, 
      SegmentName = x.SegmentName 
     }); 
     return segment.ToList(); <-- Cannot convert generic list to generic list? 
    } 
} 
+1

Sie wäre besser dran mit einem View-Modell mit den zwei Eigenschaften zu schaffen (und verwendet '.Select (x => new SomeModel {...});') und eine Sammlung des Modells zurück. –

+0

Ändere 'FillSegment' den Rückgabetyp auf' dynamisch' (wenn die Helper-Klasse und der Controller in derselben Assembly sind) –

Antwort

1

In solchen Fällen ist es wahrscheinlich besser, eine Viewmodel Klasse einführen und gib es zurück. Möglicherweise möchten Sie eine Zuordnungsbibliothek verwenden.

public class SegmentViewModel 
{ 
    public string SegmentID { get; set; } //not sure if it of string type 
    public string SegmentName { get; set; } 
} 

public IEnumerable<SegmentViewModel> FillSegment(int siteid) 
{ 
    using (DBConnection db = new DBConnection()) 
    { 
     return db.Segment.Where(c => c.SiteID == siteid).Select(x => new SegmentViewModel 
     { 
      SegmentID = x.SegmentID, 
      SegmentName = x.SegmentName 
     }); 
    } 
} 

// you can also use JsonResult instead of ActionResult 
public JsonResult FillSegment(int siteid) 
{ 
    SegmentHelper segmenthelper = new SegmentHelper();  
    return Json(segmenthelper.FillSegment(siteid), JsonRequestBehavior.AllowGet); 
} 
0

Die Select Anweisung kehren Sie eine Folge von anonymen Objekten mit Eigenschaften SegmentID und SegmentName und sie können nicht zur Liste der Strings konvertiert werden. Sie mussten den Rückgabetyp FillSegment ändern.

+0

kann ich wissen, was der Rückgabetyp ist? –

+0

öffentliche Liste FillSegment (int site) <- Liste ist Rückgabetyp. –

+0

danke für ihre infos, ich werde morgen im büro ausprobieren. –

0

Ich bin nicht 100% sicher, aber ich denke, das sollte funktionieren

Controller:

 public ActionResult FillSegment(int siteid) 
    { 
     SegmentHelper segmenthelper = new SegmentHelper();  
     return Json(segmenthelper.FillSegment(siteid), JsonRequestBehavior.AllowGet); 
    } 

Segmenthelper Klasse:

public list<Segment> FillSegment(int siteid) 
    { 
     using (DBConnection db = new DBConnection()) 
     { 
      var segment = db.Segment.Where(c => c.SiteID == siteid).Select(x => new 
     { 
      SegmentID = x.SegmentID, 
      SegmentName = x.SegmentName 
     }).toList(); 
     return segment; 
     } 
    } 
Verwandte Themen