2013-08-16 4 views
-1

Я пытался найти лучший подход к созданию сценария, который похож на списки вакансий на этой странице: http://www.usi.edu/careersv/jobsearch.asp. Я создал базу данных и заполнил ее, но я застрял в наиболее эффективном методе отображения моей информации любым способом, близким к тому, что находится на странице. Мой идеальный внешний вид был бы гиперссылкой A-Z вверху и как только пользователь нажимает на букву, которую он отображает под горизонтальными списками, что доступно.Linq Razor Script to A - Z Index

Это то, что я сделал до сих пор:

@using admin.code.Database 

    @{ 
     var car = new DatabaseEntities(); 
     var result = (from item in table.Lists     
       orderby item.Name ascending 
       select item); 

foreach (var res in result) 
{ 
    <div> 
    <ul> 
     <li><a href="@res.Link">@res.Name</a></li> 
     </ul> 
    </div> 
} 

}

Могу ли я получить некоторые советы по более эффективному направлению двигаться в?

ответ

1

Группируйте по первой букве, а затем прокрутите отображаемую группу.

что-то вдоль линий этого:

var result = table.Lists.OrderBy(x => x.Name).GroupBy(x => x.Name[0]) 

Дисплей:

foreach(var res in result) 
{ 
    <a href="#@res.Key"></a> 

    foreach(var item in res.Where(x => x[0] == res.Key){ 
     <div> 
      <ul> 
       <li><a href="@item.Link">@item.Name</a></li> 
       </ul> 
      </div> 
    } 
} 

Убедитесь, что у вас нет пустых строк или обрабатывать этот случай на поиска символов.

0
char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); 

var car = new DatabaseEntities(); 
var result = table.Lists.OrderBy(l=>l.Name); // For displaying them all 
var groups=result.GroupBy(l=>l.Substring(0,1)).OrderBy(l=>l.Key); 
var hasAlpha=groups.Select(l=>l.key); 

<ul> 
foreach(var letter in alpha) 
{ 
if (hasAlpha.Contains(letter.toString()) 
{ 
<li>@letter.toString()</li> 

} else { 
<li><a href="#@letter.toString()">@letter.ToString()</a></li> 
} 
</ul> 

foreach(var group in groups) 
{ 
<ul id="#@group.Key"> 
foreach(var item in group) 
{ 
<li>@item.Name</li> 
} 
</ul> 
} 
+0

Это должно сбросить все письма, в том числе тех, с ограниченными физическими возможностями, а затем также генерировать материал внизу, сгруппированный по первой букве, и цель гиперссылки. Или очень близко. –

0

Я хотел бы начать с ключевыми значений (то есть: названия вкладок) и построить запрос оттуда:

var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".Cast<string>(); 

var tabs = 
    from letter in letters 
    select new { 
    Key = letter, 
    Items = 
     from item in tables.Lists 
     where item.Name.StartsWith(letter, StringComparison.CurrentCultureIgnoreCase) 
     select item 
    }; 

<ul id="navLinks"> 
foreach (var tab in tabs) { 
    <li> 
    <a class="navLink" href="#@tab.Key"> 
     @tab.Key 
    </a> 
    </li> 
} 
</ul> 

<div id="items"> 
    foreach (var tab in tabs) { 
    <ul id="@tab.Key" class="tab"> 
     foreach (var item in tab.Items) { 
     <li class="tabItem"> 
      @item.Name 
     </li> 
     } 
    </ul> 
    } 
</div> 
+0

Отказ от ответственности: Я ценю четкость кода над производительностью. –

+0

Могу ли я иметь пример добавления ul и li? – Paradigm

+0

@Paradigm: Образец кода (непроверенный) выше должен теперь близко соответствовать странице USI. –