我一直在努力找出创建与此页面上的工作列表类似的脚本的最佳方法:http://www.usi.edu/careersv/jobsearch.asp。我已经创建了数据库并填充了它,但我坚持使用最有效的方法来使我的信息以接近页面上的内容的方式显示。我的理想外观是顶部的A-Z超链接,一旦用户点击它在水平列表下方显示的字母,就会显示可用的字母。
这是我到目前为止所做的:
@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>
}
}
我可以就更有效的方向获得一些建议吗?
答案 0 :(得分: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>
}
}
确保在字符查找中没有空字符串或处理该情况。
答案 1 :(得分: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>
}
答案 2 :(得分: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>