2011-09-01 4 views
0

나는 클릭 할 때 'selected'와 'unselected'클래스 사이를 토글하는 HTML 버튼으로 생성 된 체크리스트를 가지고있다. 각 옵션에는 관련 ID와 선택적 주석 입력이 있습니다.

POST와 함께 JQuery $ .ajax() 메소드를 사용하여 선택된 버튼의 ID와 관련 주석을 보내려고합니다. 내가 가진 생각은 '저장'과 같이 클릭하면 선택한 ID와 해당 댓글의 키/값 컬렉션을 만들 것입니다 : 다음

selections = "{id1: 'comment1', id2: 'comment2', ...}" 

을 $ 아약스의 데이터 부분에 전달() 그래서 같은 방법

$.ajax({ 
    type: "POST", 
    url: "MyPage.aspx/MyMethod" 
    data: selections, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     onSuccess(msg); 
    } 
}); 

그리고 마지막으로는 HttpContext.Current.Request.Form 통해 반복에 의해 MyMethod의 선택에 액세스 할 수 있습니다.

그러나 이것을 시도하면 HttpContext.Current.Request.Form은 항상 비어 있습니다. 내 접근 방식이 잘못 되었나요? 그렇다면 왜? 누구든지 다른 접근법을 제안 할 수 있습니까?

도움을 주시면 감사하겠습니다. 미리 감사드립니다! 방법 사이

  1. 페이지 방법합니다 ([WebMethod] 수정과 .aspx 페이지에서 정적 메서드)
  2. 스위치 문 :

    또한, 나는 JQuery와 AJAX API의 서버 메소드를 호출하는 4 가지 방법을 알고 .ASHX 페이지

  3. 웹 서비스
ProcessRequest의 방법 사이 .aspx 페이지
  • 스위치 문의 Page_Load에서3210

    어느 쪽이 가장 효율적입니까? 저는 2가 페이지의 불필요한 인스턴스를 포함 할 것이라고 생각합니다. 따라서 그렇게해서는 안됩니다.

  • 답변

    0

    먼저 선택 변수가 유효한 JSON인지 확인하십시오. 질문에 쓴 것은 유효한 JSON 표기법이 아닙니다.

    둘째, 웹 메서드 정의에서 MyMethod에 문자열을 매개 변수로 받아야합니다. 수 있습니다 당신은 당신의 방법의 몸에서

    [WebMethod] 
    public MyMethod(string selections) 
    { 
        //Do processing here 
    } 
    

    로 선언 말, 예를 들어, JavascriptSerializer를 사용하여 Dictionary<string,string> 문자열을 역 직렬화 :. 이제

    JavascriptSerializer js = new JavascriptSerializer(); 
    Dictionary<string,string> result = js.Deserialize<Dictionary<string,string>>(selections); 
    

    을 수행 할 수있는 요소를 통해 루프하여 사전.

    선택 변수에 인용 부호로 묶인 모든 속성이 있어야합니다. '의견', 'ID2': 귀하의 경우, ID1은, ID2는 ... 'ID1'할 필요가 등 '댓글',

    편집

    어떻게 웹 서비스를 설명하는 코드를 추가 전화해야합니다.

    var selections = "{'id1': 'comment1', 'id2': 'comment2'}"; 
    
    $.ajax({ 
        type: "POST", 
        url: "MyPage.aspx/MyMethod" 
        data: JSON.stringify(selections), 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(msg) { 
         onSuccess(msg); 
        } 
    }); 
    

    마지막 조언으로 jsFiddle에 익숙해지면 빠르게 테스트 할 수 있습니다. See this입니다.

    +0

    답장을 보내 주셔서 감사합니다. 나는 당신의 지시를 따르고 그것을 작동 시키려고 노력했습니다. 하나, 나는'{id1 : 'comment1'}'대신'{selections : '{id1 :'comment1 '}'}'을 실제로 전달할 것으로 기대한다. 그런 다음에 만 MyMethod에서'selections '을 검색 할 수 있습니다. 문자열 값''[Object object] ''를 갖는'selections' 매개 변수를 사용하여'MyMethod'를 이런 방식으로 처리했습니다. 이 문제를 비 직렬화하는 데 어려움이 있습니다. 나는 노동절 주말 이후에 다시 올 것이고 이것에 대해 다시 일하게 될 것이며 그것이 어떻게 진행되는지 알려줄 것이다. 다시 한 번 감사드립니다! – FBNMDN

    +0

    @ user924092 내 편집을 참조하십시오. 나는 당신이 클라이언트 측에서해야 할 것을 썼다. 너는 아주 가까웠다. – Icarus

    +0

    편집 한대로 데이터를 전달하면 'MyMethod'의 매개 변수는'(string id1, string id2)'이어야하고'(string selections)'이 아니어야합니다. ID의 수가 예측할 수 없기 때문에이 문제가 해결되지 않습니다. – FBNMDN

    0

    선택 변수는 문자열이 아닌 개체 여야합니다.

    var selections = { id1: 'a', id2: 'b' }; 
    
    +0

    답장을 보내 주셔서 감사합니다. 그러나 Page Methods는 JSON이 포함 된 문자열을 게시 할 것으로 예상하므로 JSON 객체를 문자열로 묶습니다. – FBNMDN