2017-08-07 31 views
0

我一個webService.asmx使用Jquery和服務裏面我正在檢索usercontrol控件的值,將其保存在數據庫中,但用戶控制已拋出一個NullReferenceException用戶控制控件是空

這裏呼籲的Ajax通話

function SaveEdit() 
    { 
     $.ajax({ 
      type: "POST", 
      url: "Services/RatiosSettingsService.asmx/UpdateRatios", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (result) { } 
     }); 
    } 

,這是WebService代碼

[WebMethod] 
    public void UpdateRatios() 
    { 
     using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Crs2"].ConnectionString)) 
     { 
      ADO ado = new ADO(); 
      List<SqlParameter> parameters = new List<SqlParameter>(); 
      ucOtherRatios2 obj = new ucOtherRatios2(); 

      Dictionary<string, int> hs = obj.GetHsChks(); 

      foreach (KeyValuePair<string, int> item in hs) 
      { 
       SqlParameter para = new SqlParameter(item.Key, item.Value); 
       parameters.Add(para); 
      } 

      con.Open(); 
      ado.CUDSp("UpdateRatios", "spUpdateClientRatios",parameters,con); 
      con.Close(); 
     } 
    } 

,這裏是其中的例外用戶控件方法內發生了檢索控件值

public Dictionary<string, int> GetHsChks() 
    { 
     Dictionary<string, int> chks = new Dictionary<string, int>(); 

     chks.Add("@siAnalysisOtherRatiosHistorical1", Convert.ToInt32(chkOthWcHs.Checked)); 
     chks.Add("@siAnalysisOtherRatiosHistorical2", Convert.ToInt32(chkOthWiHs.Checked)); 
     chks.Add("@siAnalysisOtherRatiosHistorical3", Convert.ToInt32(chkOthTlgHs.Checked)); 
     chks.Add("@siAnalysisOtherRatiosHistorical4", Convert.ToInt32(chkOthEiHs.Checked)); 
     chks.Add("@siAnalysisOtherRatiosHistorical5", Convert.ToInt32(chkOthEcHs.Checked)); 

     chks.Add("@siAnalysisOtherRatiosHistorical6", Convert.ToInt32(chkOthEicHs.Checked)); 
     chks.Add("@siAnalysisOtherRatiosHistorical7", Convert.ToInt32(chkOthEsHs.Checked)); 
     chks.Add("@siAnalysisOtherRatiosHistorical8", Convert.ToInt32(chkOthEtHs.Checked)); 

     return chks; 
    } 

它說,複選框爲空

回答

0

你不能從一個WebMethod訪問頁面的控制。 由於web方法不帶頁面狀態。這不是一個完整的回發。相反,只有會話cookie隨請求一起傳播。您必須執行完整頁面回發來獲取或設置控制值。 或者你必須通過AJAX post方法發送控件的值。

你可以在下面的鏈接的詳細信息:

How to access page controls inside a static web method?

+0

我改變了我的代碼..我打電話從用戶控制方法從沒有webMethod我做了它使用回發按鈕,單擊並仍然給我,空異常 –

+0

您不能訪問控件的情況下回發因爲當你在做AJAX回發時,它不是整頁回發。因此,您需要將JSON格式的數據從AJAX回發方法發送到您的.net方法。 –

0

我看到一件事jQuery中這將是很好的改變。如果您只獲取JSON數據,Maby最好在jQuery中使用$.getJSON()函數。在那裏你可以使用.done()來獲取數據,.fail()可以使用debbug。

接下來的事情是設置POST或GET變量傳遞數據到您的JSON文件以獲取正確的數據。