1

I got my previous question which is quite the same. Passing data from ajax to mvc controller - null parameter error

We've changed some things in interface and javascript after it. So now I get this error, when I try to pass data on server

The parameters dictionary contains a null entry for parameter 'method' of non-nullable type 'API.PVT.Solver.Methods' for method 'System.Web.Mvc.ActionResult StandartModelResult(API.PVT.Solver.InputDataModel, API.PVT.Solver.Methods, API.PVT.Solver.DefaultConstants)' in 'WebServices.Controllers.PVT.PVTMethodsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter

Here's my client side request

 GetServerData:function(inputData) {
        var outputData;
        $.ajax({
            type: 'POST',
            url: "/PVTMethods/StandartModelResult",
            data: JSON.stringify(inputData),
            success: function (data) {
                outputData = data.result;
                appl.PlotData = data.result;
            },
            error: function (data) {
                console.log("Error" + data);
            },
            dataType: "json",
            contentType: "appllication/json; charset=utf-8",
        });
        return outputData;

    }

enter image description here

Here's how json looks like:

"{"method":"eMcCain","model":{"task":"eBw","temperatureRanges":{"Start":200,"End":1000,"Samples":30}},"constants":{"ProducedGOR":500,"OilGravity":35,"SeparatorGasGravity":0.7,"StockTankOilGravity":0.84985,"WaterSalinity":20}}"

Here's server side models

  public class DefaultRanges
    {
        public virtual double Start { get; set; } //начало отрезка
        public virtual double End { get; set; } //конец отрезка
        public virtual double Samples { get; set; } //шаги
    }
    //константы
    public class DefaultConstants
    {
        public virtual double ProducedGOR { get; set; }
        public virtual double OilGravity { get; set; }
        public virtual double SeparatorGasGravity { get; set; }
        public virtual double StockTankOilGravity { get; set; }
        public virtual double WaterSalinity { get; set; }
    }

    //pressure rate (pisa)
    public class PressureDefaultRanges : DefaultRanges { }

    //temperature ranges (Фаренгейты если чо)
    public class TemperatureDefaultRanges : DefaultRanges { }

    public class PlotRanges : DefaultRanges
    {
        public virtual double PlotConstant { get; set; } //GOR или Pressure
    }
    // w\ pressure
    public class PlotRangesWP : PlotRanges
    {
        public virtual double Pressure { get; set; }
    }
    // w\ GOR
    public class PlotRangesWGOR : PlotRanges
    {
        public virtual double GOR { get; set; }
    }

    //решаемые задачи
    public enum Tasks { ePb, eRs, eBo, eBg, eMo, eMg, eMod, eBw, eMw, eRsw };
    //применяемые методы
    public enum Methods
    {
        eAbdulMajeed,//+
        eAlShammasi,//+
        eAlKhafaji,//+
        eAlMarhoun,//+
        eAlMarhounSA,//+
        eAlmehaideb,//+
        eAlNajjaretal,/
        eAziz,//+
        eBeal,//+
        eBeggsRobinson,//+
        eBeggsVazquez,//+
        eBergman,//+
        eDempsey,//+
        eDindorukChristman,//+
        eDoklaOsman,//+
        eElam,//+
        eElsharkawy,
        eFarshad,//+
        eGlaso,//+
        eHasan,//+
        eKartoatmodjoSchmidt,//+
        eKhairy,//+
        eKhanEtAl,//dead oil viscosity пока не нужен
        eLabediL,//+
        eLabediNA,//+
        eLasater,//+
        eLeeGonzales,//+
        eLevitanMurtha,//+
        eLucas,//+
        eMcCain,//+
        eMakary,//+
        eObomanuOkpobiri,
        eOmarTodd,//+
        eOwolabiCI,//+
        eOwolabiNS,//+
        ePetrosky,//+
        eSchlumbergerKuwait,//?  
        eStanding//+
    };




    public class InputDataModel
    {

        public Tasks task { get; set; }

        public PressureDefaultRanges pressureRanges { get; set; }

        public TemperatureDefaultRanges temperatureRanges { get; set; }

        public PlotRanges currentTaskPlotRanges { get; set; }
        public double plotConstant { get; set; } 
    }

Here's server side controller method

 public ActionResult StandartModelResult(InputDataModel model , Methods method, DefaultConstants constants = null)
        {
            SolverInit(constants);

            SetDeafultSettings(); //стандартные настройки методов
            //var method = Methods.eMcCain;
            PVTMethodsSolver.PVTSolverTaskMethodSettings(model.task, method);

            var currentResult = resultArray(model);

            return Json(new { result = currentResult, status = "ok"}, JsonRequestBehavior.AllowGet);

        }

What's wrong here? It's even can't reach server now, I mean the request. What could help?

Community
  • 1
  • 1
DanilGholtsman
  • 2,354
  • 4
  • 38
  • 69

1 Answers1

1

Change ajax code like that and it's started to work

GetServerData:function(inputData) {
        var outputData;
        $.ajax({
            type: 'POST',
            async: false,
            url: "/PVTMethods/StandartModelResult",
            data: inputData,
           // async: true,
            success: function (data) {
                outputData = data.result;
                appl.PlotData = data.result;
            },
            error: function (data) {
                console.log("Error" + data);
            },
            dataType: "json",
          //  contentType: "appllication/json; charset=utf-8"
        });
        return outputData;

    }
DanilGholtsman
  • 2,354
  • 4
  • 38
  • 69
  • 1
    For anyone else coming across this, remember that this answer is for MVC Controllers; if you are using WebAPI Controllers, this answer will not work, – joedotnot Oct 20 '20 at 07:35