2013-11-25 42 views
1

我有一個項目列表,我希望用戶使用jquery sortable進行排序。 該項目的結構是這樣的:Mvc4堅持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個項目排序以他們的內心慾望。但我還沒有找到一種方法來更新優先級的隱藏值(用戶排序項目的順序)

如何將項目的順序持久保存到我的控制器?

+0

有沒有這樣的事情上堅持控制器的數據。你的意思是保存一些持久性存儲的價值,如RDBMS? –

+0

@emrenevayeshirazi是的,我只需要獲取項目的順序到控制器,從那裏我可以很容易地將所有內容保存到數據庫。 – mmilan

+0

您需要通過ajax更新來完成此操作,因爲數據是動態的,不再與請求時在表單上顯示的訂單有關係。我以前成功完成了這個任務,但現在正在運輸。我會更新一個答案,在未來一小時左右的時間內爲您提供幫助。對不起,沒有這個例子,但你可能會發現臨時的方法 –

回答

1

這是我如何設法解決的問題:

在客戶端我並執行以下操作:

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; 
    }); 
}); 

每當用戶移動的元件I更新conatins的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!"); 
}