簡體   English   中英

如何在.net母版頁中訪問JavaScript變量

[英]How to access javascript variable in .net master page

我需要啟用.net母版頁中存在的腳本,僅在使用該母版頁的選定html頁中。 可以通過在需要此腳本的html頁面的javascript中聲明一個變量並將變量設置為某個值來實現,以便僅當變量為NotNullorEmpty時才能在母版頁中啟用腳本? 有人知道這是否有效嗎? 如果是這樣,如何在html中獲取javascript變量,進入.net主頁?

我可以想到兩種方法。

第一個將變量分配給隱藏的輸入字段。 可以在Request.Form中訪問。

HTML

<input type="hidden" value="your value" name="Hidden1" id="Hidden1"/>

JavaScript的

document.getElementById('Hidden1').value = "an other value";

C#

var myValue = Request.Form["Hidden1"];

第二種是將變量保存到cookie中,該cookie可以在Request.Cookies中訪問。

var myValue = Response.Cookies["Cookie1"].Value;

我所見過的最靈活的形式是將JSON對象直接作為腳本呈現到頁面(添加您可能還需要添加的任何其他腳本),然后使javascript代碼在表單上為JSON數據填充一個隱藏字段,以供提交服務器解析。

以下是基本步驟:

  • 創建一個空的隱藏字段供服務器在客戶端提交時讀取,但將其空發送給客戶端。
  • 創建一個字符串,該字符串是您需要發送給客戶端的腳本和JSON數據。 (使用JavaScriptSerializer .NET類。)
  • script標簽及其內容填充LiteralControl (這在OnPreRender步驟中效果很好,但是您可以在其他位置進行。)
  • 包含JSON2.js(在整個Web上-從可信來源獲取)
  • 使用JSON2.stringify()將任何javascript對象推入該字段,編寫JavaScript代碼以填充提交時的隱藏字段。
  • 在服務器上,您可以再次使用JavaScriptSerializer從提交的對象中讀取值。

您基本上想要做的是測試javascript。

有幾種方法可以做到這一點,但是我會同時使用服務器端和客戶端Cookie。

在您的global.asax的onbeginrequest中,測試“ js-test-s”的服務器端cookie

  • Cookie存在,請檢查“ js-test-c”
    • 存在“ js-test-c” Cookie,已啟用JS
    • “ js-test-c”沒有Cookie,已禁用JS
  • Cookie不存在...
    1. 設置“ js-test-s” cookie
    2. 輸出一個簡單的html文檔...
        [HTML]\n   [頭]\n     [元刷新標簽設置為1秒/]\n     [腳本設置“ js-test-c” cookie,然后強制刷新/]\n   [/頭]\n   [機構] [/體]\n [HTML] 
    3. 瀏覽器將刷新帶有一個或兩個cookie的請求。

警告:您可能要存儲原始請求詳細信息,並在禁用cookie的情況下重定向到其他位置。

我可能無法正確理解問題,但據我所知,最簡單的方法是在母版頁上創建一個屬性,然后在需要執行腳本的所有頁面上設置它:

在母版頁中

public bool EnableScript
{
    set
    {
        if (value == true)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "startup", "alert('test');", true);
        }
    }
}

在需要運行使用當前母版頁的javascript的所有頁面中:

protected void Page_Load(object sender, EventArgs e)
{
    this.Master.EnableScript = true;
}

如果您必須在每個頁面上輸出JavaScript,即使是在一次不執行的頁面上(為什么?),也可以將其添加為函數,然后在屬性內添加代碼以調用該函數,並將屬性設置為在需要執行JavaScript的所有頁面上為true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM