2010-03-27 2 views
3

세 번째로 오늘 밤 수정 해 봅니다. 이전과 다른 접근 방식을 시도해보십시오.jQuery ASP.NET MVC ActionResult를 사용하여 .toArray를 정렬 할 수 있습니다.

JQuery와 정렬 가능한 목록을 감안할 때 ..

<ul id="sortable1" class="connectedSortable"> 
    <li class="ui-state-default" id="item1">Item 1</li> 
    <li class="ui-state-default" id="item2">Item 2</li> 
    <li class="ui-state-default">Item 3</li> 
    <li class="ui-state-default ">Item 4</li> 
    <li class="ui-state-default">Item 5</li> 
</ul> 

<ul id="sortable2" class="connectedSortable"> 
</ul> 

그리고 ASP.NET MVC ActionResult ..

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Insert(string[] items) 
    { 
     return null; 
    } 

자바 스크립트에 의해 활성화 ...

 $("#sortable1, #sortable2").sortable({ 
      connectWith: '.connectedSortable', 
      dropOnEmpty: true, 
      receive: function() { 
       var items = $(this).sortable('toArray'); 
       alert(items); 
       $.ajax({ 
        url: '/Manage/Events/Insert', 
        type: 'post', 
        data: { 'items': items } 
       }); 
      } 
     }).disableSelection(); 

'경고' 올바른 항목을 표시합니다. 그것은 'item1, item2'등을 보여줍니다.하지만 ASP.NET MVC ActionResult는 아무것도 얻지 못합니다. 이 메소드는 실행되지만 'items'매개 변수는 null입니다. 어떤 아이디어?

답변

2

는에서 해결 된 직렬화 문제 같은데 jQuery 1.4.2 (related question 참조).


원래 대답은 :
나는 그렇다고 대답을 파악,하지만 당신은 가장 가능성) = 그것을 좋아하지 않을 것이다.

Phil Haack의 블로그에서 form post example을 보면, 입력 요소의 이름이 모두 같은 경우 목록에 포함됩니다. 그래서 같은 객체의 배열에 문자열의 배열을 매핑 시도 :

var items = $.map( 
    $(this).sortable('toArray'), 
    function(item, index){ 
     return {"item": item}; 
    } 
); 

$.ajax({ 
    url: '/Home/Insert', 
    type: 'post', 
    data: { items: items } 
}); 

을하고 내가 한 때 내가 올바른 길이의 null 이외의 배열을 가지고 제출하지만, 각 셀은 null입니다. 내가 원하는 가까이,하지만 확실히이

items[0][item] item1 
items[1][item] item2 

을 : 문제는 (방화범에 따라)에서 POST PARAMS이 모습이었다. 제가 실제로 제출하기를 원하는 것은 다음과 같습니다 :

items item1 
items item2 

필의 예에서 본 양식이 본질적으로 그렇게하기 때문입니다. JSON을 그렇게 직렬화하도록하는 방법을 모르겠습니다. 그래서 나는 속임수를 쓰고 이렇게 문자열을 손으로 만들었습니다.

$.ajax({ 
    url: '/Home/Insert', 
    type: 'post', 
    data: 'items=items1&items=items2' 
}); 

이 방법이 효과적입니다. 액션에서 items 배열의 값을 검사했을 때 "item1"과 "item2"에 두 개의 문자열이있었습니다. 따라서 데이터를 직접 직렬화하여 (말하자면) 아약스 호출에서 문자열을 인수로 사용하여 코드를 작동시킬 수있는 것처럼 보입니다. 어떻게 든 이건 잘못된 길로 느껴지기 때문에 누군가가 나를 더 잘 느끼게하거나 바르게 느끼길 바랍니다.

+0

실제로 나는 그것을 좋아합니다. 훌륭합니다. 정말 고마워요 !!! – Ciel

+1

운명이어야합니다. 필 Haack의 게시물을 어제 건너 봤습니다. 프레젠테이션에 넣을 물건을 찾고있었습니다. 우리가 왜 프로젝트를 ASP.NET MVC로 옮겨야하는지에 대한 연구에서. – R0MANARMY

0

당신이 항목 이후

data: { 'items[]': items } 

배열입니다 사용해 볼 수 있습니다, 그것은 반 같아요,하지만 나는 그것을 중요한 생각과는 샷 : 가치

+0

:(작동하지 않았다.) – Ciel

관련 문제