说实话,动态加载控件一直是一个让我很头疼很头疼的问题,也看了很多帖子文章,大多数都说在在回传之后的pageload中重新加载一遍控件,这没问题,可是如果我的控件就不是在页面载入的时候就加载的,是在点击一个button之后动态加载的怎么办?加一个viewstate标志,该加载的时候再重新加载,可是如果这个用户控件里面我之前输入的信息就全美了。不废话了,说方法。
其实实现起来那是相当的简单的,控件动态加载总是需要容器的,用tabel也好,用placeholder也好,实现方法就是把放置用户控件的容器,放在一个div里面,为引起回传的控件添加一个客户端属性,保存这个div的innerHTML,在页面加载的时候,再把这个div的inHTML读取出来就行了,下面是部分代码。
前台
<div id="divexam" style="width: 100px; height: 100px">
<uc1:test id="exam1" runat="server"></uc1:test>
</div>
<asp:Button id="Button1" runat="server" Text="交卷" OnClick="Button1_Click">
后台相关代码
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//为按钮1注册保存函数
Button1.Attributes.Add("onclick", "saveview()");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
//do something
//调用读取函数
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), "", "loadview()", true);
}
我这用的ajax.net 没用的情况吧调用读取函数改成RegisterStartupScript就行了
保存和读取的js代码
var hidhtml;
//保存状态
function loadview()
{
document.getElementById('divexam').innerHTML=hidhtml;
}
//读取状态
function saveview()
{
hidhtml=document.getElementById('divexam').innerHTML;
}