I have a model like this:
public PurchaseOrder
{
[Required] [StringLength(15)]
public virtual string OrderNumber {get;set;}
// etc.
}
>
Well I have "solved" it, but I do not really understand why the changes I made have helped.
I had to do three things:
Remove the json filter (filters don't bind)
Change the contentType to application/json
$.ajaxSetup({ contentType: "application/json; charset=utf-8" });
Use the MVC futures download Microsoft.Mvc.dll as described here: http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx. Where is says to add this to Application_Start() in Global.asax.cs:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
Now I dont know exactly why that has worked, but it has.
Unfortunately it has had a negative side effect: the contenttype is applied to all $.get() and $.post() methods, and broken all my jqgrids - they only seem to work if the content type is the default of application/x-www-form-urlencoded
So I've asked 2 follow on questions:
Is it possible to set the content type in a $.post() call? Then I wouldn't need to set it globally Jquery - How to make $.post() use contentType=application/json?
Is it possible to make jqrid work if the contenttype is application/json? Jquery - How to make $.post() use contentType=application/json?