Вычисляемое свойство не рассчитывается при передаче в качестве параметра в $ http.post в AngularJS

0

Я создаю некоторый объект в 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, он читается как значение() означает действовать как функция.

Как я могу получить их значения на стороне сервера?

Теги:
asp.net-mvc

1 ответ

0

Вы не можете отправлять объекты 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
        }
    );
}

Если вы не собираетесь использовать этот объект перед публикацией, вы всегда можете просто использовать вычисление без обертывания внутри функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню