У меня была такая же проблема. Я решил это, изменив код представления, чтобы заменить символ тире пустой строкой:
<div id="divItems">
@foreach (var item in Model)
{
<div id="@string.Format("item_{0}", item.Id.ToString().Replace("-", string.Empty))">
@item.Title
</div>
}
</div>
Примечание: я использовал div вместо ul / li для моей ситуации.
Мой JavaScript выглядит так:
$("div#divItems").sortable({
cursor: "move",
update: function (event, ui) {
var container = $(this);
var sequence = container.sortable("serialize", { key: "Sequence" });
$.post("@Url.Action("EditSequence")", sequence, function (data) {
if (data.success) {
container.fadeTo("normal", 0, function () {
container.fadeTo("normal", 1);
});
} else {
alert(data.message);
}
});
}
});
Примечание: я изменил ключ на 'Sequence', а комбо fadeTo () используется для визуальной обратной связи с пользователем, что последовательность успешно сохранена.
Мой метод действия контроллера выглядит так:
// POST: /Showcase/EditSequence?Sequence=<Guid List>
[Authorize]
[HttpPost]
public ActionResult EditSequence(List<Guid> Sequence)
{
try
{
for (int i = 0; i < Sequence.Count; i++)
{
var item = repos.GetSingle(Sequence[i]);
if (item != null)
{
item.Seq = (i + 1);
}
}
repos.Save();
return Json(new { success = true, message = "Sequence has been saved!" }, JsonRequestBehavior.DenyGet);
}
catch (Exception ex)
{
return Json(new { success = false, message = ex.Message }, JsonRequestBehavior.DenyGet);
}
}
Подшивка модели выполняет преобразование строк Guid без черточек в список , связанный с параметром Sequence.