W międzyczasie udało mi się rozwiązać problem. Wklejam działający kod. Mam tylko jedno pytanie, dlaczego gdy nie dodam: "event.preventDefault();" w skrypcie, zapytania są wysyłane podwójnie?
Widok:
@model IEnumerable<sortable.Models.Tab>
@{
ViewBag.Title = "Sort";
}
<h2>Sort</h2>
<div>
@using (Html.BeginForm("Sort", "Home", FormMethod.Post))
{
<ul id="sortable">
@foreach (var item in Model)
{
<li id="@item.War">
@item.War
</li>
}
</ul>
<input type="submit" value="Save" id="submit-list" />
}
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Skrypt:
<script type="text/javascript">
$(document).ready(function () {
$("#sortable").sortable({ axis: "y" });
});
$(function () {
$("#submit-list").click(function (event) {
event.preventDefault();
$.ajax({
url: '/Home/Sort/',
data: { items: $("#sortable").sortable('toArray') },
type: 'post',
traditional: true
});
});
});
</script>
Kontroler Get + Post:
public ActionResult Sort()
{
return View(db.Tab.OrderBy(o => o.Kol).ToList());
}
[HttpPost]
public ActionResult Sort(List<string> items)
{
if (ModelState.IsValid)
{
int kol = 1;
foreach (var item in items)
{
Tab tabItem = db.Tab.Where(w => w.War == item).FirstOrDefault();
tabItem.Kol = kol;
kol++;
db.SaveChanges();
}
}
return JavaScript("location.reload(true)");
}