2014-02-11 3 views
1

나는 asp.net 웹 개발에 처음있어.
나는이asp.net에서 제출하는 Ajax

<form id="frmNewUser"> 
    <table> 
     <tr> 
      <td>User ID 
      </td> 
      <td> 
       <input id="Text1" name="txtUserId" type="text" class="easyui-validatebox" data-options="required:true" /> 
      </td> 
     </tr> 
     <tr> 
      <td>User Name 
      </td> 
      <td> 
       <input name="txtUsername" type="text" class="easyui-validatebox" data-options="required:true" /> 
      </td> 
     </tr> 
    </table> 
</form> 

아이디어와 같은 형태가 새로운 사용자를 추가하는 것입니다하고 난 비동기 적으로 할 필요가있다. 그래서

[WebMethod] 
public static void AddUser() 
{ 

} 

로 aspx 페이지 뒤에 한 가지 방법을 추가 그리고

$.ajax({ 
      type: "POST", 
      url: "UserManagment.aspx/AddUser", 
      data: $("#frmNewUser").serialize(), 
      success: function (msg) { 
      alert("hello"); 
      }, 
      error: function (xhr, ErrorText, thrownError) { 
        alert("Error" + xhr.status); 
      } 

     }); 

내 의심이
1. 어떻게 AddUser() 방법으로 양식 데이터를 역 직렬화하고, 무엇을해야 마찬가지로 아약스 양식의 제출을 ​​작성했습니다 매개 변수가 될
2. AddUser() 메소드는 ajax를 제출 한 후에 절대 적중하지 않습니다. 디버깅 후 Page_Load()이 호출 중임을 알게되었습니다. 제어 장치를 AddUser()까지 어떻게 얻을 수 있습니까? 이미 WebMethod를 사용하는

<httpModules> 
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
</httpModules> 

답변

1

좋아 나는
는 기본적으로 페이지 방법은 JSON 형식의 데이터를 예상하고있다 http://www.asp.net/ajaxlibrary/jquery_webforms_post_data_to_pagemethod.ashx

에 따라 이어 그것을 밖으로 정렬. 은 "뒤에 코드"코드를

public static void AddUser(NameValue[] formVars) 
     { 
      //formvars will contain list of values 
      foreach (NameValue nv in formVars) 
      { 
       // strip out ASP.NET form vars like _ViewState/_EventValidation 
       if (!nv.name.StartsWith("__")) 
       { 
        string ss = nv.value; 

       } 
      } 
      return; 
     } 



     public class NameValue 
     { 
      public string name { get; set; } 
      public string value { get; set; } 
     } 
다음 포함

$.ajax({ 
       type: "POST", 
       url: "UserManagment.aspx/AddUser", 
       dataType: "JSON", // type of data is JSON (must be upper case!) 
       timeout: 10000, // AJAX timeout 
       data: JSON.stringify({ formVars : $("#frmNewUser").serializeArray() }), 
       contentType: "application/json", 
       success: function (msg) { 
        alert("hello"); 
       }, 
       error: function (xhr, ErrorText, thrownError) { 
        alert("Error" + xhr.status); 
       } 


      }); 

그래서 나는 아약스 전화를 수정

1

을 추가 한, 당신은이 작업을 수행 할 수 있습니다 ... 그리고 (A 영문 페이지, 그것은 User Controls (.ascx)에서 작동하지 않습니다) 어떤 httpmodule

서버 측에 대한 필요가 없습니다 :

[WebMethod] 
    public static void addUser(string Params) 
    { 
     System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
     var oParamter = serializer.Deserialize<Paramter>(Params); 
    } 

    private class Paramter 
    { 
     public string id { get; set; } 
     public string name { get; set; } 
    } 

HTML 태그 :

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> 
    </asp:ScriptManager> 

    <table> 
     <tr> 
      <td>User ID 
      </td> 
      <td> 
       <input id="Text1" name="txtUserId" type="text" class="easyui-validatebox" data-options="required:true" /> 
      </td> 
     </tr> 
     <tr> 
      <td>User Name 
      </td> 
      <td> 
       <input id="Text2" name="txtUsername" type="text" class="easyui-validatebox" data-options="required:true" /> 
      </td> 
     </tr> 
     <tr> 
      <td></td> 
      <td> 

       <input id="Button1" type="button" value="submit" onclick="Button1_click()" /> 

      </td> 
     </tr> 
    </table> 

클라이언트 자바 스크립트 :

<script> 

    function param() { 

     this.id = document.getElementById("Text1").value; 
     this.name = document.getElementById("Text2").value; 
    }; 

    function Button1_click() { 

     PageMethods.addUser(JSON.stringify(new param()), successHandler, failedHandler); 
    }; 

    function successHandler() { 
     alert("operation done successfully"); 
    }; 

    function failedHandler() { 
     alert("operation failed"); 
    }; 

</script> 
관련 문제