[英]Asp.Net - EF - MVC - Indexing Rows
我正在使用Asp.Net
, EF6
( MVC
),並且在我的視圖中存儲了一些數據。 我需要為每行建立一些索引。 這是視圖。
對於每一行,我都有0個索引。 我想知道,如果EF中有一些內置功能,這將有助於為每行添加索引(1,2,3 ....) ,並且在創建或刪除新行時會自動更新索引。
這是用於在我的視圖中創建表和進行分頁的代碼。
<div class="bs-example">
<div class="table-responsive">
<div class="panel panel-default">
<table class="table table-striped table-hover table-bordered" cellspacing="0" data-toggle="table" data-click-to-select="true">
<tr>
<th style="vertical-align:middle;" class="text-center">
Index
</th>
<th style="vertical-align:middle;" class="text-center">
@Html.ActionLink("English", "Index", new { sortOrder = ViewBag.EnglishSortParm, currentFilter = ViewBag.CurrentFilter })
</th>
<th style="vertical-align:middle;" class="text-center">
@Html.ActionLink("Russian", "Index", new { sortOrder = ViewBag.RussianSortParm, currentFilter = ViewBag.CurrentFilter })
</th>
<th style="vertical-align:middle;" class="text-center">
@Html.ActionLink("Armenian", "Index", new { sortOrder = ViewBag.ArmenianSortParm, currentFilter = ViewBag.CurrentFilter })
</th>
<th style="vertical-align:middle;" class="text-center">
@Html.ActionLink("French", "Index", new { sortOrder = ViewBag.FrenchSortParm, currentFilter = ViewBag.CurrentFilter })
</th>
<th style="vertical-align:middle;" class="text-center">
@Html.ActionLink("Spanish", "Index", new { sortOrder = ViewBag.SpanishSortParm, currentFilter = ViewBag.CurrentFilter })
</th>
<th style="vertical-align:middle;" class="text-center">
@Html.ActionLink("Arabic", "Index", new { sortOrder = ViewBag.ArabicSortParm, currentFilter = ViewBag.CurrentFilter })
</th>
<th></th>
</tr>
@{
foreach (var item in Model.Item1)
{
<tr class="clickableRow">
<td style="vertical-align:middle; font-size:medium;font-style:italic;" class="text-center">
@ViewBag.IndexOfRow.ToInt32
</td>
<td style="vertical-align:middle;" class="text-center">
@Html.DisplayFor(modelItem => item.English)
</td>
<td style="vertical-align:middle;" class="text-center">
@Html.DisplayFor(modelItem => item.Russian)
</td>
<td style="vertical-align:middle;" class="text-center">
@Html.DisplayFor(modelItem => item.Armenian)
</td>
<td style="vertical-align:middle;" class="text-center">
@Html.DisplayFor(modelItem => item.French)
</td>
<td style="vertical-align:middle;" class="text-center">
@Html.DisplayFor(modelItem => item.Spanish)
</td>
<td style="vertical-align:middle;" class="text-center">
@Html.DisplayFor(modelItem => item.Arabic)
</td>
<td style="vertical-align:middle;" class="text-center">
<span style="color:white;">
@Html.ActionLink("Edit", "Edit", new { id = item.Text, @style = "color:red;" })
@*@Html.ActionLink("Details", "Details", new { id = item.Text })*@
@Html.ActionLink("Delete", "Delete", new { id = item.Text })
</span>
</td>
</tr>
}
}
</table>
</div>
<br />
Page @(Model.Item1.PageCount < Model.Item1.PageNumber ? 0 : Model.Item1.PageNumber) of @Model.Item1.PageCount
@Html.PagedListPager(Model.Item1, page => Url.Action("Index",
new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
</div>
</div>
這是我的控制器中的代碼
public ViewResult Index(int? page)
{
int pageSize = 15;
int pageNumber = (page ?? 1);
var allModels = new Tuple<IPagedList<Translation>, List<Translation>>
(translations.ToPagedList(pageNumber, pageSize), translations.ToList()) { };
return View(allModels);
}
我刪除了不必要的代碼,只剩下了用於分頁的代碼。
到目前為止,我還沒有做任何事情,因為到目前為止,我在Google或SO中都找不到任何索引問題或文章。
感謝幫助。
如果要在創建表時放置索引,可以在表主體中像這樣循環:
<tbody>
@{
int counter = 1;// Index start value
foreach (var Item in Model.SomeList)
{
<tr>
<td> @counter </td>
</tr>
counter++;
}
}
</tbody>
當您不知道該怎么做時,請創建一個新的類:))
我在開玩笑,但這個想法仍然有效。
為什么不創建一個新類,該類將代表您的“ ViewModel”,該類將具有確切的EF模型和一個額外的Index屬性,可用於綁定到視圖中的索引?
從控制器傳遞到視圖的是新的ViewModel類。
注意:
如果您想花哨的話,可以去以下地方:ObservableCollection http://msdn.microsoft.com/zh-cn/library/ms668604(v=vs.110).aspx ,它源自INotifyPropertyChanged
基本上,這意味着您可以使用一個事件,當列表已更改(添加,刪除)時可以觸發該事件,該事件將用於更新索引。
只需將action方法中的開始行索引設置為ViewBag
。
int pageSize = 15;
int pageNumber = (page ?? 1);
ViewBag.StartRowIndex = ((pageNumber - 1) * pageSize) + 1;
然后在視圖中使用它。
@{
var rowIndex = (int)ViewBag.StartRowIndex;
}
foreach (var item in Model.Item1)
{
<tr class="clickableRow">
<td style="vertical-align:middle; font-size:medium;font-style:italic;" class="text-center">
@(rowIndex++) //@ViewBag.IndexOfRow.ToInt32
</td>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.