2014-02-11 45 views
1

我對asp.net web開發非常陌生。
我有這樣Ajax在asp.net中提交

<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> 

的想法形式是添加一個新用戶,我需要以異步方式做到這一點。所以我添加一個方法背後的aspx頁面

[WebMethod] 
public static void AddUser() 
{ 

} 

而且我寫的Ajax表單提交的

$.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()。我已經加入

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

回答

1

好,我整理出來
其次按http://www.asp.net/ajaxlibrary/jquery_webforms_post_data_to_pagemethod.ashx

基本上頁方法在JSON格式的預期數據。所以我修改Ajax調用作爲

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


      }); 

的 「代碼隱藏」 包含以下代碼

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

使用WebMethod,你可以做到這一點...而且也沒有必要對任何httpmodule

服務器端(一個aspx頁面上,它不User Controls (.ascx)工作) :

[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> 

客戶端的JavaScript:

<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>