1

I have a model that I am trying to pass to a controller via jQuery's ajax method

Here is the model:

public class Package
{
    public string Name;
    public int? Length;
    public int? Width;
    public int? Height;
    public int Weight;
    public bool IsFragile;
    public string Description;
    public PackageType Type;

    public int? Volume
    {
        get
        {
            if (Height != null && Width != null && Length != null)
            {
                return (int) Height*(int) Width*(int) Length;
            }
            return null;
        }
    }

}

My ajax request is done like this:

$.ajax({
            type: "POST",
            url: "/Package/Save",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(this.package),
            success: function (data) {
                self.success('Thank you. Your package has been saved successfully!');
            },
            error: function () {
                self.error('Ooops, something went terribly wrong when saving this package. Please give us a few minutes to fix it!');
            }
        });

Which sends the following to the server:

{"Name":"asasdas","Length":"15","Width":"31","Height":"326","Weight":"65","IsFragile":false,"Description":"asdasdasdasd","MyType":0,"Volume":null,"Type":"2"}

My controller receives the request but the paramater "savedPackage" has all properties set to default:

    [HttpPost]
    public JsonResult Save(Package savedPackage)
    {
        return Json(new {test = true});
    }

1 Answer 1

11

Make the public fields properties instead:

public class Package
{
    public string Name { get; set; }
    public int? Length { get; set; }
    public int? Width { get; set; }
    public int? Height { get; set; }
    public int Weight { get; set; }
    public bool IsFragile { get; set; }
    public string Description { get; set; }
    public PackageType Type { get; set; }

    public int? Volume
    {
        get
        {
            if (Height != null && Width != null && Length != null)
            {
                return (int) Height*(int) Width*(int) Length;
            }
            return null;
        }
    }

}

See also this question

Sign up to request clarification or add additional context in comments.

2 Comments

Wow... I was always under the impression that { get; set; } was already implied. Thank you...
Working on bringing Mvc to legacy code bases that don't have properties, this constantly pops up and bites me. Thanks for the refresher.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.