ASP.NET MVC, JSON & non JavaScript clients

I need to ensure that an application I am developing is accessable and also works with JavaScript turned off. I just need a pointer to assist with the following.

I had 3 'chained' select boxes and I wanted JavaScript enabled clients to have a nice Ajax experience. I can easily write the required functionality to populate the chained boxes on the change event of the preceeding select using jQuery and JSON with a WCF service. However what about the non JavaScript client?

Would I wrap a submit next to the select and place these inside their own form to post back with a certain action or different querstring parameter? Can the same controller give me a partial JSON response as well as feeding the full HTML response. Can anyone point me to a good demo that utilises both JSON and normal HTTP posts to produce the same result in ASP.NET MVC. All ASP.NET MVC demo/examples I see forget about the non JavaScript enabled client.

Update

But isn't that true for Ajax calls using the Microsoft Ajax client library if I read it corectly - which I am wanting to avoid and use only jQuery - apologies should have mentioned that.

Also I would prefer not to put that noise everywhere in the controllers (reminds me of ispostback from webforms...shudder).

It's a shame there is no attribute that I can use on a controller like with [AcceptVerbs(HttpVerbs.Post)] but for content types e.g [AcceptType(httpTypes.Json)].

There must be a better way than using that if statement everywhere.....

Answers


This article has an elegant solution for your problem: http://devlicio.us/blogs/sergio_pereira/archive/2008/12/05/reusing-views-in-asp-net-mvc-for-ajax-updates.aspx


You can check the IsMvcAjaxRequest property and use it inside your controller and then return a partial view (user control) or JSON result if true, or the full View if it's false.

Something like this:

public ActionResult List()
{
   if (!Request.IsMvcAjaxRequest())
   {
       // Non AJAX requests see the entire ViewPage.
       return View();
   }
   else
   {
       // AJAX requests just get a trimmed down UserControl.
       return Json(...);
   }
 }

More info here: MVC AJAX Sites That Gracefully Degrade


Need Your Help

In Multiprocessing, why is 1 process faster than multiple when accessing this Queue?

python python-3.x queue multiprocessing

I have this code and have noticed when specifying more than 1 thread, performance suffers. The concept here is simple, setup a Queue in multiprocessing, access it from each thread, equally-- note I...

Element has a different type than an attribute?

xml xsd

I am coding on a simple game and writing the *.xsd file.