繁体   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