我在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不得回发到服务器来完成此任务。
答案 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);