我有一個視圖模型綁定到'TreasureHuntDetails'對象,其中包含一個線索列表。這是它的數據模型的一部分。從MVC視圖模型保存重新排序的列表項
public TreasureHuntDetails()
{
Clues = new List<Clue>();
}
[Key]
public int TreasureHuntId { get; set; }
public List<Clue> Clues { get; set; }
在頁面上,我有一張桌子。 foreach循環迭代線索列表以將它們添加到表格中,例如,
@for (int i = 0; i < Model.Clues.Count; i++)
裏面的for循環是相當大的表格元素,但這裏的表格單元列的一個示例:
<td>@Html.DisplayFor(m => Model.Clues[i].Location)</td>
一切都很好,到目前爲止。然後我使用jQuery UI,使表的項目使用拖放功能,這樣可以重新排序:
<script type="text/javascript">
$(document).ready(function()
{
$("#clueTable tbody").sortable().disableSelection();
});
</script>
一切都很好,我可以拖放的元素。
問題是我不知道如何保存元素的新順序並將它們保存回數據庫。
我嘗試的第一件事就是將線索列表傳遞給控制器方法,但我發現一旦線索列表到達控制器方法,它總是空。
例如:
@Url.Action("ViewCluePage", @Model.Clues)
即使我送全@Model,線索的列表中總是空。從數據模型的構造函數中刪除新的列表實例並沒有解決這個問題。
我試過的另一件事是將整個表格封裝到一個HTML表格中,但仍然是線索列表爲空。
因此,基本上,這個問題實際上是兩個問題:
1)爲什麼線索發送的模型對象控制器後總是空的列表。
2)如何保存項目列表的新訂單?
更新:按照@recursive的建議,當我嘗試將提示線索元素提交給HTML表單時,我發現我犯了一個錯誤。
我用這以外的for循環,其遍歷線索元素:
@Html.HiddenFor(m => m.Clues)
我不得不把HiddenFor行添加的內部進行循環(每個線索項),以及用於的每個屬性線索項目,例如
@Html.HiddenFor(m => m.Clues[i].Id)
因此,這將是向前邁出的一步,以便能夠獲取發送到控制器列表中的項目,但我覺得我還是需要代碼時發送到控制器,將反映的線索項目的新秩序。目前,在使用JQuery sortable()方法重新排列屏幕上元素的順序時,這並不會改變元素的順序,因爲它們存儲在綁定到視圖(@ Model.Clues)的數據模型中。
爲了使新列表回到控制器操作中,列表項的生成html必須包含一些像'的元素。你的列表項html是什麼樣的?您可以將其添加到您的問題。 – recursive 2013-04-24 18:15:14
我的回答對你有幫助嗎?你能接受答案嗎? – gwin003 2013-04-25 15:04:55
是的,它確實感謝,它讓我走上了正確的道路,所以我已經提出了你的答案。儘管我已經完成了很多不同的實現,所以我稍後會發布它。 – 2013-04-25 16:43:47