0

我在 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 不得回发到服务器来完成此操作。

4

2 回答 2

1

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

  • 获取值

  • 发布值

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

服务器变量是最灵活的解决方案,如果使用得当,不会对性能造成严重影响。但是你已经排除了这个选项。

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

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

但是,您的价值似乎远大于此。这样您就可以使用服务器变量,或者将您的 HTML 存储在某处并传递对它的引用。例如,您可以将生成的 HTML 保存在具有唯一标识符键的数据库中,然后将键传递给 Page2,Page2 将在数据库中查询实际的 HTML。

于 2012-12-26T22:38:11.110 回答
-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);
于 2012-12-26T21:04:41.167 回答