Я создаю некоторый объект в jQuery, который также содержит некоторые вычисленные свойства. Я отправляю этот объект в службу веб-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. где, поскольку он содержит значения на стороне клиента до того, как вызов переходит на серверную сторону, которую я вижу через firebug, он читается как значение() означает действовать как функция.
Как я могу получить их значения на стороне сервера?
Вы не можете отправлять объекты function
качестве параметров в свой метод POST, потому что нет соответствующего типа.Net, к которому он может быть преобразован. function
сохраненная в свойстве Value
, не будет автоматически оцениваться до отправки данных.
Я предполагаю, что вы используете этот объект внутри своего контроллера 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
}
);
}
Если вы не собираетесь использовать этот объект перед публикацией, вы всегда можете просто использовать вычисление без обертывания внутри функции.