Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 渐进式增强-当JavaScript关闭时该怎么办?_Asp.net Mvc_Ajax_Progressive Enhancement - Fatal编程技术网

Asp.net mvc 渐进式增强-当JavaScript关闭时该怎么办?

Asp.net mvc 渐进式增强-当JavaScript关闭时该怎么办?,asp.net-mvc,ajax,progressive-enhancement,Asp.net Mvc,Ajax,Progressive Enhancement,我理解渐进式增强是什么,我只是对实际实现过程中的一些细节模糊不清。当然,这可能是因为我看得不对。让我试着用一个假设来解释我的困难: NET MVC网站。我有一个具有选项卡式导航的视图。每个选项卡针对一个电影类别/流派,显示该类别电影的5-10个链接。电影数据是通过Netflix的Odata获得的 我最初的想法是在单击每个选项卡时,使用Ajax从适当的OData GET请求中提取和解析JSON。我如何提供非JavaScript版本?有可能吗 对于不需要JSON的简单请求(例如,让用户登录到系统中)

我理解渐进式增强是什么,我只是对实际实现过程中的一些细节模糊不清。当然,这可能是因为我看得不对。让我试着用一个假设来解释我的困难:

NET MVC网站。我有一个具有选项卡式导航的视图。每个选项卡针对一个电影类别/流派,显示该类别电影的5-10个链接。电影数据是通过Netflix的Odata获得的

我最初的想法是在单击每个选项卡时,使用Ajax从适当的OData GET请求中提取和解析JSON。我如何提供非JavaScript版本?有可能吗


对于不需要JSON的简单请求(例如,让用户登录到系统中),我可以简单地设置一个cookie并基于它动态更改页面以反映更改。但是如果我需要返回并解析JSON呢?如何提供替代方案?

根据定义,没有JS就没有JSON(JavaScript对象表示法)。没有JS,就不会进行AJAX调用。您的页面将按原样呈现,就像旧的学校网站一样

如果需要循序渐进地执行此操作,则必须调用odata服务服务器端,在viewdata或viewmodel中为站点提供.net对象,并让视图/分区对其进行渲染


在ASP.Net MVC操作中,通过控制器可用的httpcontext将在此路径上具有一个属性:
this.httpcontext.Request.IsAjaxRequest()
,并可用于测试是否要返回视图或仅返回json数据,或任何类型的ActionResult。这对于构建渐进式增强风格的站点来说是一个很好的省时方法。

根据定义,没有JS就没有JSON(JavaScript对象表示法)。没有JS,就不会进行AJAX调用。您的页面将按原样呈现,就像旧的学校网站一样

如果需要循序渐进地执行此操作,则必须调用odata服务服务器端,在viewdata或viewmodel中为站点提供.net对象,并让视图/分区对其进行渲染


在ASP.Net MVC操作中,通过控制器可用的httpcontext将在此路径上具有一个属性:
this.httpcontext.Request.IsAjaxRequest()
,并可用于测试是否要返回视图或仅返回json数据,或任何类型的ActionResult。这对于构建渐进式增强风格的网站来说是一个很好的省时方法。

渐进式增强的关键在于,服务器端必须能够完全生成所有页面中出现的最后一点HTML。这是显而易见的,否则(如果关闭JS),应用程序将没有任何部分能够进行上述渲染

由于服务器端必须知道如何呈现所有内容,因此在客户端根据服务器提供的JSON响应生成内容(DOM元素/HTML)没有多大意义。为什么重复你自己

这使我们得出了一个逻辑结论,即在客户端执行动态更新时,需要从服务器获取现成的HTML(因为呈现逻辑在那里),并根据需要将其插入DOM中。然后,您可以使用jQuery处理新插入的元素,并根据需要对其进行增强

所以——忘了在客户机上解析JSON,否则您将自己锁定在渐进增强之外。如果你想打电话给第三方,让服务器作为你的中间人:打电话给服务器,提供所有必要的信息,以便它打电话给第三方,并返回现成的HTML


如果您这样做,那么服务器当然可以毫无问题地提供站点上所有内容的非JS版本。实现了对JS的完全不依赖。

渐进增强的关键在于,服务器端必须完全能够生成所有页面中出现的最后一点HTML。这是显而易见的,否则(如果关闭JS),应用程序将没有任何部分能够进行上述渲染

由于服务器端必须知道如何呈现所有内容,因此在客户端根据服务器提供的JSON响应生成内容(DOM元素/HTML)没有多大意义。为什么重复你自己

这使我们得出了一个逻辑结论,即在客户端执行动态更新时,需要从服务器获取现成的HTML(因为呈现逻辑在那里),并根据需要将其插入DOM中。然后,您可以使用jQuery处理新插入的元素,并根据需要对其进行增强

所以——忘了在客户机上解析JSON,否则您将自己锁定在渐进增强之外。如果你想打电话给第三方,让服务器作为你的中间人:打电话给服务器,提供所有必要的信息,以便它打电话给第三方,并返回现成的HTML


如果您这样做,那么服务器当然可以毫无问题地提供站点上所有内容的非JS版本。完全不依赖JS。

你们两个回答都很好。很遗憾,我只能选择一个。渐进式提升的一个伟大技巧是进行渐进式发展。在没有AJAX的情况下构建您的站点(也可以帮助您在时间不多的情况下获得一些有用的东西),并逐渐(逐步)添加AJAX以增强站点。例如,首先让每个选项卡加载一个新页面,然后切换到通过AJAX加载自己的每个选项卡。很遗憾,我只能选择一个。渐进式提升的一个伟大技巧是进行渐进式发展。在没有AJAX的情况下构建您的站点(也可以帮助您在时间不多的情况下获得一些有用的东西),并逐渐(逐步)添加AJAX以增强站点。例如,首先让每个选项卡加载一个新页面,然后切换到每个选项卡通过AJAX加载自己