ASP.NET MVC,JSON和非JavaScript客户端

我需要确保我正在开发的应用程序是可访问的,并且还可以关闭JavaScript。 我只需要一个指针来协助以下内容。

我有3个’链式’选择框,我希望启用JavaScript的客户端有一个很好的Ajax体验。 我可以轻松编写所需的function,使用带有WCF服务的jQuery和JSON填充前一个选择的change事件上的链接框。 然而,非JavaScript客户端呢?

我是否会在select旁边包含一个提交,并将它们放在自己的表单中,以便使用特定操作或不同的querstring参数进行回发? 同一个控制器可以给我一个部分JSON响应,也可以提供完整的HTML响应。 任何人都可以指向一个良好的演示,利用JSON和普通HTTPpost在ASP.NET MVC中产生相同的结果。 我看到的所有ASP.NET MVC演示/示例都忘记了非JavaScript启用的客户端。

更新

但是,对于使用Microsoft Ajax客户端库的Ajax调用,如果我核心地读取它 – 我想要避免并且只使用jQuery – 那么道歉应该已经提到过。

此外,我宁愿不在控制器中放置那些噪音(让我想起网络forms的ispostback ……不寒而栗)。

遗憾的是我没有可以在[AcceptVerbs(HttpVerbs.Post)]这样的控制器上使用的属性,但对于内容类型,例如[AcceptType(httpTypes.Json)]。

必须有比使用if语句更好的方法…..

本文为您的问题提供了一个优雅的解决方案: http : //devlicio.us/blogs/sergio_pereira/archive/2008/12/05/reusing-views-in-asp-net-mvc-for-ajax-updates.aspx

您可以检查IsMvcAjaxRequest属性并在控制器中使用它,然后返回部分视图(用户控件)或JSON结果(如果为true),或返回完整视图(如果为false)。

像这样的东西:

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(...); } } 

更多信息: MVC AJAX网站优雅降级

(参考您之前的回答):您可以在Request.Form中传递一个值,表示这是一个启用或未启用javascript的浏览器,然后创建一个控制器工厂,根据您在请求中获得的内容实例化适当的控制器。形成; 常规请求的默认控制器(启用了javascript的浏览器)和仅返回完整视图的“后备控制器”。 我不确定控制器数量的两倍是否比单个控制器周围的if-else语句更好,但我想这是个人偏好的问题。

打赌有更简单的解决方案,但我希望这个问题有更多的曝光。