您可以使用AJAX。但是,首先我們先來擺脫這些循環,並取代它們與顯示模板提高代碼:
@model IEnumerable<SomeViewModel>
<table>
<thead>
<tr>
<th>Title</th>
<th>Body</th>
<th>Price</th>
<th>actions ...</th>
</tr>
</thead>
<tbody>
@Html.DisplayForModel()
</tbody>
</table>
<div id="details"></div>
,然後定義顯示模板(~/Views/Shared/DisplayTemplates/SomeViewModel.cshtml
):
@model SomeViewModel
<tr>
<td>@Html.DisplayFor(x => x.Title)</td>
<td>@Html.DisplayFor(x => x.Body)</td>
<td>@Html.DisplayFor(x => x.Price)</td>
<td>
<!-- no idea what the purpose of this *noteid* attribute on the span is
but this is invalid HTML. I would recommend you using the
HTML5 data-* attributes if you wanted to associate some
metadata with your DOM elements
-->
<span class="EditLink ButtonLink" noteid="@Model.Id">
Edit
</span>
|
<span>
@Html.ActionLink("Delete", "Delete", new { id = Model.Id })
</span>
|
@Html.ActionLink(
"Detalji", // linkText
"Details", // actionName
null, // controllerName
new { id = Model.Id }, // routeValues
new { @class = "detailsLink" } // htmlAttributes
)
</td>
</tr>
現在所有剩下的就是AJAXify這個細節在一個單獨的JavaScript文件鏈接:
$(function() {
$('.detailsLink').click(function() {
$('#details').load(this.href);
return false;
});
});
當然,你有下列行爲即假設:
public ActionResult Details(int id)
{
SomeDetailViewModel model = ... fetch the details using the id
return PartialView(model);
}
我不確定你對我有什麼瞭解,我想在你指定的div細節中顯示每個項目的詳細信息,我沒有在這裏看到你的詳細信息視圖,在我的表中我顯示了標題,正文和價格,但在我的細節中有很多更多信息。 – GoranB
對不起,我沒有看到細節控制器準時:) – GoranB
@GoranB,不,我不明白你。我以爲你想要一個主/細節場景。因此,當用戶點擊每行的詳細信息鏈接時,表格外部的某個div中顯示給定行的詳細信息。那不是你要求的嗎? –