【发布时间】:2014-07-24 16:21:36
【问题描述】:
我不确定如何准确地表达这个问题,但我一直在研究表格排序器,以便在 ASP.NET MVC 中掌握 AJAX 和 JQuery。
到目前为止,它可以使用以下代码:
局部视图:
@model IEnumerable<EH.SASS.TillStatus.Model.Models.TillTransactionsOnHold>
<link href="~/Content/Site.css" rel="stylesheet" />
<script src="~/Scripts/mvctablesort.js"></script>
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<div id="tablediv">
<table id="empTable">
<thead>
<tr>
<th data-attr="tillnetworkid">Till Network ID
</th>
<th data-attr="transactiontype">Transaction Type
</th>
<th data-attr="tid">TID
</th>
<th data-attr="transactionid">Transaction ID
</th>
<th data-attr="cardno">Card No.
</th>
<th data-attr="receiptno">Receipt No.
</th>
<th data-attr="scheme">Scheme
</th>
<th data-attr="amount">Amount
</th>
<th data-attr="date">Date
</th>
<th data-attr="resolved">Resolved
</th>
<th data-attr="dateresolved">Date Resolved
</th>
<th data-attr="resolvedby">Resolved by
</th>
<th data-attr="datecreated">Date Created
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Till.NetworkId)
</td>
<td>
@Html.DisplayFor(modelItem => item.TransactionType.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.TID)
</td>
<td>
@Html.DisplayFor(modelItem => item.TransactionId)
</td>
<td>
@Html.DisplayFor(modelItem => item.CardNo)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReceiptNo)
</td>
<td>
@Html.DisplayFor(modelItem => item.SchemeType.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.Amount)
</td>
<td>
@Html.DisplayFor(modelItem => item.TransactionDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Resolved)
</td>
<td>
@Html.DisplayFor(modelItem => item.ResolvedDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.User.EHLogin)
</td>
<td>
@Html.DisplayFor(modelItem => item.CreatedDate)
</td>
<td>
@Html.ActionLink("Edit", "Edit", "TransactionsOnHold", new { id = item.TillTransactionsOnHoldUid_PK }, null)
@if (!item.Resolved)
{
@Html.ActionLink("Resolve", "Resolve", "TransactionsOnHold", new { id = item.TillTransactionsOnHoldUid_PK }, null)
}
</td>
</tr>
}
</tbody>
</table>
</div>
<script type="text/javascript">
$(document).ready(function () {
sort("#empTable", "Home", "_heldTransactionTable")
});
</script>
JQuery/AJAX:
function sort(tableid, controllername, actionname) {
$(tableid).find( 'th' ).click(function () {
var sortBy = $( this ).data("attr");
$.ajax({
cache: false,
url: "/"+controllername+"/"+actionname,
data: "{ 'sortBy': '" + sortBy + "' }",
dataType: "html",
type: "POST",
async: "true",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
$("#tablediv").html('');
$("#tablediv").html(data);
},
error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); }
});
})
}
控制器:
public PartialViewResult _heldTransactionTable(string sortBy)
{
var tilltransactionsonhold = db.TillTransactionsOnHold...
if (sortBy == (string)Session["sortBy"])
{
switch (sortBy)
{
case "tillnetworkid":
tilltransactionsonhold = tilltransactionsonhold
.OrderBy(m => m.Till.NetworkId);
break;
case "transactiontype":
tilltransactionsonhold = tilltransactionsonhold
.OrderBy(m => m.TransactionType.TransactionTypeUid_PK);
break;
case "tid":
etc..etc..
}
Session["sortBy"] = "";
}
else
{
Session["sortBy"] = sortBy;
switch (sortBy)
{
case "tillnetworkid":
tilltransactionsonhold = tilltransactionsonhold
.OrderByDescending(m => m.Till.NetworkId);
break;
case "transactiontype":
tilltransactionsonhold = tilltransactionsonhold
.OrderByDescending(m => m.TransactionType.TransactionTypeUid_PK);
break;
case "tid":
etc...etc...
}
}
return PartialView(tilltransactionsonhold.ToList());
}
你会注意到我为了节省阅读时间而删除了一些代码,我也很欣赏这不是最好的解决方案,它是一个学习练习,欢迎任何建议。
每次都从数据库中过滤一个全新的数据模型会吸引广泛使用的应用程序,并且只过滤模型本身会更有效。
我的问题是:在不大量修改现有代码的情况下将数据模型从局部视图传递给控制器的好方法是什么,这样我就不必像查询数据库一样多?
【问题讨论】:
标签: jquery asp.net ajax asp.net-mvc asp.net-mvc-4