2011-11-11 111 views
3

只有JavaScript禁用時,我纔會執行MVC操作。 要努力實現這個目標,我在我的HTML中添加了標籤<noscript>只有在禁用JavaScript的情況下才執行操作

<noscript> 
    @Html.Action("BlogRss", "Home") 
</noscript> 

在我的控制器,按照行動

public PartialViewResult BlogRss() 
{ 
    return PartialView("_BlogRss", GetFeeds()); 
} 

的問題是,標籤<noscript>不影響非 - 執行操作。 使用或不使用javascript也可以做到這一點!

我知道,如果瀏覽器支持JavaScript的<noscript>內一切都將不被顯示。

+0

爲什麼要在服務器護理如果JavaScript被禁用? – zzzzBov

+0

只有在禁用JavaScript的情況下,他才必須執行操作。否則它將通過JavaScript加載 – ridermansb

回答

2

<noscript>是一個HTML標籤,而不是服務器標籤,只會在客戶端運行。服務器將始終呈現/執行您放置在它之間的任何代碼 - 客戶端將不會呈現/執行它。

有沒有檢測客戶端是否已經從服務器端啓用與否JavaScript的很好方式。最現實的方法是使用javascript/AJAX設置隱藏值或cookie(document.cookie),然後在服務器端使用此值/ cookie。如果您設置了默認的queryString如「JS =已禁用」,然後您重定向到一個URL,而不只有JS啓用此變量

@if (!IsJavascriptEnabled) { 
    <noscript> 
     @Html.Action("BlogRss", "Home") 
    </noscript> 
} 
+0

如何在asp.net mvc中執行此操作? 我創建它使用javascript:document.cookie中= c_name + 「=」 + c_value 服務器端的Response.Cookies動作不返回任何東西。那是對的嗎? – ridermansb

+0

它不會在第一次請求時返回任何內容(在JavaScript可以設置cookie之前,頁面必須先去客戶端),但它將適用於任何後續請求。 –

0

這可以實現。我知道這有點不好(重定向),但我認爲它是唯一的解決方案。

2

如果你想要一個簡單的客戶端解決方案,我建議META刷新。

<noscript> 
     <meta http-equiv="refresh" content="0; url=http://appUrl/BlogRss/"> 
</noscript> 
+0

我不明白,這是什麼?怎麼運行的? – ridermansb

+0

@Riderman de Sousa Barbosa,如果客戶端瀏覽器的javascript被禁用,它將刷新執行GET操作OP所要求的URL。 –

+0

是的,但我需要做一個請求並返回一個PartialView,而不是將整個網站重定向到一個新的URL。 @ Html.Action(「BlogRss」,「Home」)不會將整個網站重定向到一個新的URL; – ridermansb

相關問題