2015-07-02 76 views
0

我在jQuery中創建了一些也包含一些計算屬性的對象。我將該對象發送給我的Web API服務,其中此對象被定義爲類對象。來自$ scope變量的所有屬性都設置正確,除了計算變量,其顯示爲NULL表示它們的值在作爲$ http.post方法的一部分發送時未計算。請參閱我的代碼。

jQuery代碼

$scope.EstimationEfforts = { 

     //Total no. of apps distribution 
     TotalAppsDistributionNumbers: [ 
      { 
       Description: "Number of No Issue Apps", 
       Value: function() { return ($scope.Total_No_Apps * $scope.CalculationAsssumptions.ExprienceBasedAssumptions[0].Ratio)/100 } 
      }, 
      { 
       Description: "Number of Apps with vendor upgrade", 
       Value: function() { return ($scope.Total_No_Apps * $scope.CalculationAsssumptions.ExprienceBasedAssumptions[1].Ratio)/100 } 
      }, 
      { 
       Description: "Number of Bespoke Apps not Requiring remediation", 
       Value: function() { return ($scope.Total_No_Apps * $scope.CalculationAsssumptions.ExprienceBasedAssumptions[2].Ratio)/100 } 
      }, 
      { 
       Description: "Number of Bespoke Apps Requiring remediation", 
       Value: 12 
      } 
     ]} 

現在我在發送後調用這個變量如下..

var EffortModel = $scope.EstimationEfforts; 

    $http.post('/EffortEstimate/GenerateExcel', $scope.EstimationEfforts).success(function (data) { 
     alert(data);   
    }); 

在服務器端我的示例代碼是這樣的...

public class EffortModel 
{ 
    public List<AppDetails> TotalAppsDistributionNumbers { get; set; } 
} 

public class AppDetails 
{ 
    public string Description { get; set; } 
    public float? Value { get; set; }  
} 

[HttpPost] 
    public ActionResult GenerateExcel(EffortModel objEffortModel) 
    { 
     float? ss = objEffortModel.TotalAppsDistributionNumbers[0].Value; 
     return Json(ss, JsonRequestBehavior.AllowGet); 
    } 

在服務器上所有描述都正確顯示,但值(計算屬性)顯示爲NULL。因爲它包含客戶端上的值,然後調用服務器端,我可以通過螢火蟲看到它作爲Value()意味着作爲函數。

我如何在服務器端獲得它們的值?

+0

你正在嘗試發佈一個沒有相應的_.Net_類型的函數。 –

+0

我無法看到'jQuery'代碼? –

回答

0

由於沒有相應的.Net類型可以將其轉換爲您的POST方法,因此無法將function對象作爲參數發送。存儲在Value屬性中的function在數據發送之前不會自動評估。

我假設你在你的angularjs控制器中使用這個對象。如果這是真的,你應該創建另一個「伴侶」的對象,它存儲的功能和原來的對象應存儲的計算值:如果你不打算髮布之前,使用該對象

var tmpTotalAppsDistributionNumbers = [ 
     { 
      Description: "Number of No Issue Apps", 
      Value: function() { return ($scope.Total_No_Apps * $scope.CalculationAsssumptions.ExprienceBasedAssumptions[0].Ratio)/100 } 
     }, 
     { 
      Description: "Number of Apps with vendor upgrade", 
      Value: function() { return ($scope.Total_No_Apps * $scope.CalculationAsssumptions.ExprienceBasedAssumptions[1].Ratio)/100 } 
     }, 
     { 
      Description: "Number of Bespoke Apps not Requiring remediation", 
      Value: function() { return ($scope.Total_No_Apps * $scope.CalculationAsssumptions.ExprienceBasedAssumptions[2].Ratio)/100 } 
     }, 
     { 
      Description: "Number of Bespoke Apps Requiring remediation", 
      Value: 12 
     } 
    ]} 

$scope.EstimationEfforts = { 
    //Total no. of apps distribution 
    TotalAppsDistributionNumbers: [ 
    ] 
} 

//this should be called just before making the post request 
for (var i = 0; i < tmpTotalAppsDistributionNumbers.length; i++){ 
    var val = 0; 
    if (typeof tmpTotalAppsDistributionNumbers[i].Value === "function") { 
     val = tmpTotalAppsDistributionNumbers[i].Value(); 
    } else { 
     val = tmpTotalAppsDistributionNumbers[i].Value; 
    } 

    $scope.EstimationEfforts.TotalAppsDistributionNumbers.push(
     { 
      Description: tmpTotalAppsDistributionNumbers[i].Description, 
      Value: val 
     } 
    ); 
} 

,你可以總是隻使用計算而不包含在函數內部。