2010-08-18 81 views
0

我想根据是否启用javascript来在部分视图中呈现特定的HTML。我的想法是如何检测javascript是否已启用并将其存储在会话变量中,然后我可以在我的视图中测试它,例如,ASP.NET MVC2 - 检测JavaScript,将结果存储在会话变量中

<div class="product"> 
<% 
    // if Javascript is enabled, load the images asynchrously, otherwise load them directly. 
    string imgHtml = "<img id=\"myImage\" src=\"{0}\" alt=\"MyImage\" />"; 
    if ((bool)Session["jsEnabled"]) 
     imgHtml = String.Format(imgHtml, Url.Content("~/Content/images/ajax-loader.gif") + "\" onload=\"loadImageAsync(this, '" + Url.Content("~/Content/images/" + Model.thumbnail) + "')"); 
    else 
     imgHtml = String.Format(imgHtml, Url.Content("~/Content/images/image.jpg")); 
%> 

    <div><%= imgHtml %></div> 
</div> 

从我读书最多的,似乎可以用一个隐藏字段,并设置它在JavaScript值建议,但是,我不太明白,我怎么能得到这个在MVC工作,除非我的地方发布数据(这个特定的视图不在表单中)。

回答

0

纠正我,如果我错了,但它看起来像你试图使用渐进式增强。如果是这样的话,那么正确的做法是让页面呈现最基本的版本(.gif),然后尝试让更先进的技术(javascript)自己用更高级的(javascript)代替/覆盖它,版。

+0

我想要做的是让图像加载异步,如果启用JavaScript,否则加载图像的页面。加载的正常图像是非常大的jpeg(这种局部视图是为每个图像呈现图像),因此确实要加载基本HTML例如src =“image.jpg”,是否会取消任何性能提升? – James 2010-08-18 23:44:01

0

您可以使用JavaScript对设置会话变量的方法进行AJAX调用。如果JS未启用,则不进行调用,也不设置变量。

我也会把所有的代码放到一个只需要图像的src的辅助方法中,因为它会让你的视图更清晰。

+0

在页面加载之前,不能有ajax调用没有完成的可能性吗? – James 2010-08-19 12:37:39

+0

是的,有第一个页面加载不会有会话变量的问题,所以非Ajax图像将显示使用此方法总是这种情况,然而,此后,对于会话的长度,它将正确使用AJAX方法。 另一种方法可能是拥有2个不同的页面(一个用于AJAX无脚本)。链接到无脚本版本,但在顶部有JS重定向,这将在浏览器到达IMG标签之前执行。 – Chao 2010-08-19 13:18:51

相关问题