2016-03-21 3 views
0

Я могу вернуть список из контроллера ниже обзор:как вернуть Json со списком из других классов?

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

Но если я хочу сделать операцию запроса в других классах, и я называю класс от FillSegment действий, как он должен вернуться?

Контроллер:

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

segmenthelper Класс:

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

Вы бы лучше создать модель представления с этими 2 свойствами (и использовать '.select (х => новый SomeModel {...});') и возвращает коллекцию модели. –

+0

Изменить возвращаемый тип 'FillSegment' на' dynamic' (если вспомогательный класс и контроллер находятся в одной сборке) –

ответ

1

В таких случаях, вероятно, лучше, чтобы ввести класс ViewModel и вернуть его. Возможно, вы захотите использовать некоторую картографическую библиотеку.

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

Select оператор вернет вам последовательность анонимных объектов со свойствами SegmentID и SegmentName, и они не могут быть преобразованы в список строк. Вам нужно было изменить тип возврата FillSegment.

+0

Могу ли я узнать, что такое тип возврата? –

+0

public List FillSegment (int siteid) <- Список - тип возврата. –

+0

спасибо за информацию, я постараюсь завтра в офисе. –

0

Im не 100% уверен, но я думаю, что это должно работать

Контроллер:

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

Segmenthelper Класс:

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; 
     } 
    } 
Смежные вопросы