[英]Mvc4 persist order of Jquery sortable list items to controller
我有一個項目列表,我希望用戶使用可排序的Jquery進行排序。 項目的結構如下:
public class SortableItems
{
public int Code { get; set; }
public byte? Priority { get; set; }
public string Name { get; set; }
public int IsActive { get; set; }
}
在我看來,我通過以下方式呈現了表單內部的可排序內容:
@using (Html.BeginForm("TestAction", "TestController", FormMethod.Post, new { id = "submitTest" }))
{
<ul id="sortable" style="padding:0px;">
@for (int i = 0; i < Model.List.Count(); i++)
{
<li class="ui-state-default">
@Html.HiddenFor(x => Model.List[i].Code, new { @class = "id" })
@Html.HiddenFor(x => Model.List[i].Priority, new { @class = "order" })
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
@Model.List[i].Name
</li>
}
</ul>
<input type="submit" class="btn btn-primary" value="Update" />
}
現在,用戶可以按照自己的意願對列表中的N個項目進行排序。 但是我還沒有找到一種方法來更新優先級的pidden值(用戶已排序項目的順序)
如何將物品的順序保存到控制器?
這是我設法解決問題的方法:
在客戶端,我執行了以下操作:
var neworder = new Array();
$("#sortable").disableSelection();
$("#sortable").sortable({
stop: function (event, ui) {
neworder = new Array();
$('#sortable li').each(function () {
//get the id
var id = $(this).attr("data-id");
neworder.push(id);
});
}
});
$(function () {
$('#submitTest').submit(function () {
if (neworder.length < 1) {
return false;
}
$.ajax({
url: "GuardarPrioridad", type: "POST", dataType: "json",
data: { orden: neworder.toString() },
success: function (result) {
$('#ShowResultHere').text(result);
$("#submitTest").hide();// .tex.html(result);
}
});
return false;
});
});
每次用戶移動元素時,我都會更新一個數組,該數組按用戶放入元素的順序構成元素的ID。
然后,我通過ajax提交此數組,控制器接收到該數組。
我的控制器看起來像這樣:
public JsonResult SavePriority(string orden)
{
string[] data= orden.Split(',');
for (int i = 0; i < droguerias.Length; i++)
{
//save to DB
}
return Json("Saved!");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.