I'll try to dig into this over the weekend. Kind of swamped right now. Changing the content-type made it start working and I moved on. -jt
On Mon, Feb 9, 2009 at 10:59 AM, Alex Henderson <[email protected]>wrote: > Hmm... application/json should work I would think (at least it has for me > in the past) ... are you able to let us know what web browser and web server > you are using, and provide a dump of the request body being passed over the > wire i.e. using firebug? > > > On Sun, Feb 1, 2009 at 11:59 AM, James Thigpen > <[email protected]>wrote: > >> >> The model I think you're referring to is at the bottom of the original >> message: >> >> public class CreateDashboardViewModel >> { >> public string Title { get; set; } >> } >> >> the json model being passed in is (You can rip out the jquery-fu and >> just put in a string for the title to simplify things. >> >> var model = {Title: "TheTitle" }; >> var json = {model: $.toJSON(model)}; >> >> I actually just got it working, I had to rip out the contenttype >> specification in the ajax call ("contentType: 'application/json; >> charset=utf-8'"). Before I did that the passed in data wasn't >> appearing int he Context.Request.Params collection. Any idea why? >> >> I wonder if that'll bite me in the rear in some obscure way... >> >> -jt >> >> >> >> On Jan 31, 2:28 pm, Mark Jensen <[email protected]> wrote: >> > Hi >> > >> > maybe you should show us how the model as well as the the json object >> > you try to bind to the model :) >> > >> > but I think you problem lies here >> > >> > Inner exception: >> > ArgumentNullException >> > Message: >> > Value cannot be null. >> > Parameter name: s >> > >> > could it be that you are trying to bind null value to a datatype that >> > cant be null ? >> > >> > On Jan 31, 7:55 pm, James Thigpen <[email protected]> wrote: >> > >> > > I'm having trouble passing a JSON object to my action using the >> > > JSONBinder. Binding the JSON info to my model fails spectacularly with >> > > the following exception: >> > >> > > MonoRailException >> > > Message: >> > > Error building method arguments. Last param analyzed was model with >> > > value '' >> > > StackTrace: >> > > at >> > > >> Castle.MonoRail.Framework.SmartDispatcherController.BuildMethodArguments >> > > (ParameterInfo[] parameters >> > > , IRequest request, IDictionary`2 actionArgs) >> > > at Castle.MonoRail.Framework.SmartDispatcherController.InvokeMethod >> > > (MethodInfo method, IRequest request >> > > , IDictionary`2 extraArgs) >> > > at Castle.MonoRail.Framework.ActionMethodExecutorCompatible.Execute >> > > (IEngineContext engineContext, >> > > IController controller, IControllerContext context) >> > > at Castle.MonoRail.Framework.Controller.RunActionAndRenderView() >> > >> > > Inner exception: >> > > ArgumentNullException >> > > Message: >> > > Value cannot be null. >> > > Parameter name: s >> > > StackTrace: >> > > at System.IO.StringReader..ctor(String s) >> > > at Newtonsoft.Json.JavaScriptConvert.DeserializeObject(String >> > > value, Type type, JsonConverter[] converters >> > > ) >> > > at Newtonsoft.Json.JavaScriptConvert.DeserializeObject(String >> > > value, Type type) >> > > at >> > > >> Castle.MonoRail.Framework.Services.NewtonsoftJSONSerializer.Deserialize >> > > (String jsonString, Type >> > > expectedType) >> > > at Castle.MonoRail.Framework.JSONBinderAttribute.Bind >> > > (IEngineContext context, IController controller >> > > , IControllerContext controllerContext, ParameterInfo parameterInfo) >> > > at >> > > >> Castle.MonoRail.Framework.SmartDispatcherController.BuildMethodArguments >> > > (ParameterInfo[] parameters >> > > , IRequest request, IDictionary`2 actionArgs) >> > >> > > This is the javascript initiating the request: >> > >> > > $(function () { >> > > $("#create-dashboard").click(function (e) { >> > > e.preventDefault(); >> > >> > > var model = {Title: $("#new-dashboard-title").val() }; >> > > var json = {model: $.toJSON(model)}; >> > >> > > var callback = function (result) { >> > > alert(result); >> > > }; >> > >> > > $.ajax({type:'POST', url: 'Create.ashx', dataType: 'json', >> > > data: json, >> > > contentType: 'application/json; charset=utf-8', >> > > success: callback, error: function () { alert >> > > ("Grrr."); }}); >> > > }); >> > >> > > }); >> > >> > > The action: >> > >> > > [return: JSONReturnBinder] >> > > public DashboardCreatedViewModel Create([JSONBinder] >> > > CreateDashboardViewModel model) >> > > { >> > > var dashboard = dashboardService.Create(CurrentUser, >> > > model.Title); >> > >> > > return new DashboardCreatedViewModel(new DashboardSummary >> > > (dashboard)); >> > > } >> > >> > > And the CreateDashboardViewModel: >> > >> > > public class CreateDashboardViewModel >> > > { >> > > public string Title { get; set; } >> > > } >> > >> > > The only references I've been able to find to using the JSONBinder >> > > have been really old and referenced assemblies which don't exist >> > > anymore. I'm running off a not quite current version of castle trunk. >> > > I'm pretty sure my problem lies in my own ignorance, and less in a >> > > bug. >> > >> > > Any help is appreciated. I apologize for the length of the message as >> > > well. My problem sits at that annoying nexus of multiple moving parts. >> > > I tried to simplify as much as possible. >> > >> > > -jt >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
