使用jQuery将参数从一个asp.net页面传递到另一个页面

时间:2010-01-07 03:41:00

标签: asp.net jquery

我需要使用jQuery将4个参数(3个字符串和1个逗号分隔列表)从ASP.NET页面传递到另一个ASP.NET页面。目标页面应该作为单独的窗口启动,它可以与以下jQuery代码段一起使用:

$('#sourcePageBtn').click(function(){
   window.open("destinationPage.aspx");
   return false;
});

如何将参数传递到目标页面?我试图避免查询字符串传递参数,因为:

  1. 我不想在目标窗口中显示url参数(也可能很长)。

  2. 有一些特殊字符,如',/,\,&字符串参数中的等等。

  3. 请建议。

    修改 我正在尝试访问aspx文件的脚本部分中的参数,即。

    <script language="C#" runat="server">
        protected void Page_Load ( object src, EventArgs e) 
        {
         //Creating dynamic asp controls here
        }
    </script>
    

    我对脚本部分的Page_Load中的参数的特殊需要源于我在Page_Load中创建一些依赖于这些参数的动态图表控件。

    欢呼声

2 个答案:

答案 0 :(得分:5)

初步想法(在创建解决方案之前)

  1. 对大数据而不是GET使用POST。使用POST时,不会将querystring用于数据,因此URL长度限制不是问题。 (浏览器的最大URL长度不同,因此当大数据移动时,您可以远离它。)

  2. 特殊网址字符可以encoded在查询字符串中传递,因此不应该是个问题。

  3. 或者,您可以从第一页将数据存储在服务器端,然后让第二页从服务器端获取数据。但这太过分了。它会让你做不需要的服务器编程。

    通过HTTP调用传递状态是标准做法。你不应该试图绕过它。使用它。所有设施都为您而建。现在由jQuery提供一些帮助......

    注意: 在浏览器中禁用JavaScript时,请小心使用jQuery作为主要应用功能。在大多数情况下,即使禁用JavaScript,您的Web应用程序也应该可以在基本级别使用。在这之后,在JavaScript / jQuery上进行分层,以使体验更加出色,甚至令人敬畏。

    编辑:解决方案(使用ASP.NET处理)

    解决方案实施的关键资源是:

    工作原理:从主页面发生POST,结果显示在弹出窗口中。它按此顺序发生:

    • 主脚本会打开一个弹出窗口(如果它尚不存在)
    • 主脚本等待弹出窗口完全初始化
    • 主脚本POST(使用AJAX)参数到另一个页面(发送请求)
    • 主脚本接收响应并在弹出窗口中显示它。

    实际上,我们已将数据发布到弹出窗口并将参数传递给处理。

    接下来是三页,它们构成了完整的解决方案。我把所有3个放在我的桌面上,它适用于谷歌Chrome稳定版3.0.195.38。其他浏览器未经测试。您还需要jquery-1.3.2.js位于同一文件夹中。

    <强> main_page.html

    这是您提供的逻辑的扩展。 Sample使用链接而不是表单按钮,但它具有相同的id=sourcePageBtn

    此示例在POST发生时传递两个键/值对(仅作为示例)。您将在此处传递您选择的键/值对。

    <html>
    
    <head>
    <script type="text/javascript" src="jquery-1.3.2.js"></script>
    </head>
    
    <body>
    
    <a id="sourcePageBtn" href="javascript:void(0);">click to launch popup window</a>
    
    <script>
    
    $(function() {
     $('#sourcePageBtn').click( function() {
    
      // Open popup window if not already open, and store its handle into jQuery data.
      ($(window).data('popup') && !$(window).data('popup').closed) 
       || $(window).data('popup', window.open('popup.html','MyPopupWin'));
    
      // Reference the popup window handle.
      var wndPop = $(window).data('popup');
    
      // Waits until popup is loaded and ready, then starts using it
      (waitAndPost = function() {
       // If popup not loaded, Wait for 200 more milliseconds before retrying
       if (!wndPop || !wndPop['ready']) 
        setTimeout(waitAndPost, 200);
    
       else  { 
           // Logic to post (pass args) and display result in popup window...
        // POST args name=John, time=2pm to the process.aspx page...
        $.post('process.aspx', { name: "John", time: "2pm" }, function(data) {
         // and display the response in the popup window <P> element.
         $('p',wndPop.document).html(data);
        });
       }
      })(); //First call to the waitAndPost() function.
    
    
     });
    });
    
    </script>
    </body>
    </html>
    

    <强> popup.html

    这是从主页面定位的弹出窗口。您将在主页面的jQuery脚本中看到对popup.html的引用。

    最后加载弹出窗口DOM时,这里有一个“技巧”来设置window['ready'] = true。主脚本一直在检查并等待,直到弹出窗口准备就绪。

    <html>
    
    <head>
    <script type="text/javascript" src="jquery-1.3.2.js"></script>
    </head>
    
    <body>
     <!--  The example P element to display HTTP response inside -->
     <p>page is loaded</p>
    </body>
    
    <script>
        $(function() {
         window['ready'] = true;
        });
    </script>
    
    </html>
    

    process.aspx.cs(C# - ASP.NET process.aspx页面)

    主页面脚本将参数发布到的动态服务器页面。 AJAX参数到达Page.Request集合。 对于此示例,输出将作为纯文本传回,但您可以自定义应用程序要求的响应。

    public partial class process : System.Web.UI.Page {
    
        protected void Page_Load(object sender, EventArgs e) {
            // Access "name" argument.
            string strName = Request["name"] ?? "(no name)";
            // Access "time" argument. 
            string strTime = Request["time"] ?? "(no time)";
    
            Response.ContentType = "text/plain";
            Response.Write(string.Format("{0} arrives at {1}", strName, strTime));
        }
    
        protected override void Render(System.Web.UI.HtmlTextWriter writer) {
            // Just to suppress Page from outputting extraneous HTML tags.
            //base.Render(writer); //don't run.
        }
    
    }
    

    结果显示在原始/主页面的弹出窗口中。 因此,弹出窗口的内容将被"[name] arrives at [time]"

    覆盖

    主要参考文献:HTTP Made Really EasyjQuery Ajax members and examples.

答案 1 :(得分:0)

如果在打开它时保留对新窗口的引用,即var destWin = window.open(...),则可以访问destWin窗口对象上的变量和方法。或者,您可以使用window.opener从目标窗口“返回”。