2014-11-06 2 views
1

У меня есть этот метод действия индекса, из которого я передаю результат, и я хочу сортировать свою таблицу с помощью одного и того же метода действия индекса, как я могу передать оба значения Посмотреть. вот мой указательный метод ДействиеСортировка с Entity Framework в приложении ASP.NET MVC

public ActionResult Index(string sortOrder) 
{ 
    var userCount = db.CountUser(); 

    return View(userCount.ToList()); 
} 

и вот мой код сортировки:

ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; 

var teams = from t in db.Teams 
      select t; 
switch (sortOrder) 
{ 
    case "name_desc": 
     teams = teams.OrderByDescending(t => t.TeamName); 
     break; 

    default: 
     teams = teams.OrderBy(t => t.TeamName); 
     break; 
} 
+0

перед возвращенным View (userCount.ToList()); добавить ViewBag.Teams = команды; и этим вы сможете отправить оба результата в представление – Monah

+0

. Итак, вы хотите, чтобы оба ** userCount.ToList() ** и отсортированные ** команды ** перешли в ваш индексный указатель? – Vladimirs

+0

Какая ошибка? – Monah

ответ

0

Вы можете достичь этого путем:

public ActionResult Index(string sortOrder) 
{ 
    var userCount = db.CountUser(); 

    ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : sortOrder; 

    var teams = from t in db.Teams 
       select t; 

    switch ((string)ViewBag.NameSortParm) 
    { 
     case "name_desc": 
      teams = teams.OrderByDescending(t => t.TeamName); 
      break; 

     default: 
      teams = teams.OrderBy(t => t.TeamName); 
      break; 
    } 

    ViewBag.Teams = teams.ToList(); 

    return View(userCount.ToList()); 
} 

И использовать ViewBag.Teams на ваш взгляд.

Однако правильное решение, что я думаю, что было бы создать соответствующую модель, которая содержит как коллекции:

public class MyIndexViewModel 
{ 
    public List<CountUser> CountUsers { get; set; } 
    public List<Team> Teams { get; set; } 
} 

public ActionResult Index(string sortOrder) 
{ 
    var userCount = db.CountUser(); 

    ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : sortOrder; 

    var teams = from t in db.Teams 
       select t; 

    switch ((string)ViewBag.NameSortParm) 
    { 
     case "name_desc": 
      teams = teams.OrderByDescending(t => t.TeamName); 
      break; 

     default: 
      teams = teams.OrderBy(t => t.TeamName); 
      break; 
    } 

    return View(new MyIndexViewModel { CountUsers = userCount.ToList(), Teams = teams.ToList() }); 
} 

А также нужно изменить тип модели в вашем взгляде MyIndexViewModel

+0

var userCount = db.CountUser(); здесь фактически я вызываю хранимую процедуру CountUser(); и, во-вторых, можно передать динамическое выражение –

+0

Это действительно зависит от вас, что такое ** db.CountUser() **, поскольку он возвращает IEnumerable, поэтому вы можете вызывать ** ToList **, это нормально. И да, вы правы, вы не можете использовать его сразу, но ** switch ((string) ViewBag.NameSortParm) ** будет работать. – Vladimirs

+0

Thanku хорошо сейчас после того, как это решение переключатель ((строка) ViewBag.NameSortParm) , где я должен вызывать их к viewbag <й стиль = "ширина: 15%"> @ Html.ActionLink («Index "Название команды" ", новый {sortOrder = ViewBag.NameSortParm}) , на который следует смотреть сумку –

Смежные вопросы