2010-08-18 75 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

相關問題