将文字控制从一个页面传递到另一个页面

时间:2012-12-26 20:57:52

标签: c# javascript jquery vb.net

我在Page1:

中有这个文字控件
 string s1 = "<table>"
           + "<tr>"
           + "<td>AAA</td>"
           + "<td>AAA</td>"
           + "</tr>"
           + "<tr>"
           + "<td>BBB</td>"
           + "<td>BBB</td>"
           + "</tr>"
           + "</table>"
           + "<br />";

 string s2 = "<input type=\"button\" onclick=\"window.open('Page2.aspx','','Height=500,width=500')\" value=\"pop up\" />";

 LiteralControl lc = new LiteralControl(s1 + s2);
 Div1.Controls.Add(lc);

如您所见,它是一个简单的HTML表格和按钮 我想要做的是单击按钮,弹出Page2.aspx,并将没有按钮的文字控件(lc)添加到Page2.aspx(Div1)中的Div。。

我不能让这个工作。
Page1不得回发到服务器来完成此任务。

2 个答案:

答案 0 :(得分:1)

在页面之间传递数据的方法只有三种:

  • 获取值

  • POST值

  • 服务器变量(会话......等)

服务器变量是最灵活的解决方案,如果使用正确,不应导致严重的性能损失。但你已经把这个选项排除在外了。

POST值是另一种选择。它们存储在表单内的HiddenFields中,但您需要执行表单提交才能使用它们。而且由于你使用了一个弹出弹出窗口的链接,这不是一个好的解决方案。

这留下了GET值。这是将值存储在URL的查询字符串中。这个 可以工作,但它的大小限制大约为8 KB。如果你可以将HTML的大小保持在那个范围内,那么你需要做的是Base64 encode HTML(这不是加密它,它只是将它打包成一个整齐的字符串),使用编码的字符串作为URL的一部分(即“Page2.aspx?data=SomeString”),然后在Page2中使用Request.Params["data"]获取该值,然后Base64对其进行解码,并将该值放在本地Literal控件中。

但是,看起来你的价值要大得多。因此,您可以使用服务器变量,或将HTML存储在某处并传递对它的引用。例如,您可以使用唯一标识符键将生成的HTML保存在数据库中,并将密钥传递给Page2,该页面将向DB查询实际的HTML。

答案 1 :(得分:-1)

这是糟糕的编程方式,您应该.aspx页面处理HTML,而后面的代码处理数据。

例如,将数据(例如您的DataTable)添加到会话对象,或者使用GridView控件,只需执行以下操作:

myGridView.DataSource = dt;
myGridView.DataBind();

并且因为您正在重复使用相同的内容,您可以使用具有myGridView的用户控件

这样,您就不会在“代码处理”页面上处理HTML格式,并且您正在重用一个控件,明天,如果发生任何事情,您可以轻松更改一个文件,并且所有具有该控件的位置都将被修改自动。


如果您仍然不太关心体面的编程规则,可以将Literal控件添加到例如会话对象中,并在第二页上调用它:

LiteralControl lc = new LiteralControl(s1 + s2);

// Add control to a Session instance
Session["myLiteralControl"] = lc;

Div1.Controls.Add(lc);

在您的其他页面中:

LiteralControl lc = (Literal)Session["myLiteralControl"];
Div1.Controls.Add(lc);