asp.net ajax关于动态加载用户控件非常棘手的超难问题,内有示例链接.高手指教了~~~
关于动态加载ASCX控件.为了实现全站后台管理只有一个页面愚蠢至极的想法.我采用了动态加载ASCX用户控件的方法来实现.在实现中遇到了N多的难题.开发环境是ASP.NET 2.0 ASP.NET AJAX 1.0
为了达到加载后的控件能在UPDATEPANEL内部自由切换.我用了老赵的控件(控件地址:http://www.cnblogs.com/JeffreyZhao/archive/2007/03/29/SwitchPartManager.html)
我稍做了一下修改可以在切换时传递一个参数给ASCX控件.
于是做了个简单的页面来让大家看一下效果
只有一个DEFAULT.ASPX页
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterAsyncPostBackControl(this.Button1);
}
protected void Button1_Click(object sender, EventArgs e)
{
//Control uc=LoadControl("List.ascx");
//Panel1.Controls.Add(uc);
SwitchManager.GetCurrent(this.Page).SwitchTo("List");
}
有一个List.ascx控件,显示列表
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterAsyncPostBackControl((LinkButton)DataList1.Items[e.Item.ItemIndex].FindControl("LinkButton1"));
SwitchManager.GetCurrent(this.Page).SwitchTo("Update", id);
}
update.ascx用于更新.
protected void Page_Load(object sender, EventArgs e)
{
//hidArticleId.Value = this.articleId.ToString();
//初始化表单
bbb += 1;
SqlCommand command = new SqlCommand("SELECT * FROM Article WHERE Aid="+this.articleId.ToString(), conn);
SqlDataReader dr;
conn.Open();
dr = command.ExecuteReader();
if (dr.Read())
{
TextBox1.Text = dr["Title"].ToString();
DropDownList1.SelectedValue = dr["ClassId"].ToString();
HiddenField1.Value = this.articleId.ToString();
}
dr.Close();
conn.Close();
TextBox2.Text = bbb.ToString();
}
public int Id
{
get { return articleId; }
set { articleId = value; }
}
protected void Submit_Command(object sender, CommandEventArgs e)
{
int aid = Convert.ToInt32(HiddenField1.Value);
if (aid >= 0)
{
conn.Open();
string title = TextBox1.Text;
SqlCommand command = new SqlCommand("Update Article Set Title='" + title + "',ClassId=" + aid.ToString() + " WHERE Aid=" + aid.ToString(), conn);
command.ExecuteNonQuery();
conn.Close();
if (e.CommandName == "OK") { SwitchManager.GetCurrent(this.Page).SwitchTo("List"); }
//else { SwitchManager.GetCurrent(this.Page).SwitchTo("Update",aid); }
}
}
首先点击ButtonA 加载列表页,然后点击编辑,进入编辑页.这个页面出现很多问题.
首先ASCX页面有自己的PAGELOAD事件.但却没有自己的IsPostBack属性.他使用的是主页面的IsPostBack,当点击ButtonA时,已经是一个回传了.IsPostBack使终是True. 这真是太烦了.没有了这个属性更新数据库真是很糟糕.在点击更新时先触发了ASCX控件的PAGELOAD事件,此事件里的所有代码因为没有ISPOSTBACK又被重新执行了一遍.但更新竟然成功了.
问题一
百思不得其解,为什么这里会更新成功?? 但还是不怎么完美,因为不想被执行的代码在操作时总是被再次执行.
问题二.
为了想达到软件的效果.我做了一个确定和应用.点应用时数据被更新,不跳转页面.但是接下来出现视图状态验证错误的消息,这个我是一点也不知道了.
高手请指教一下.
效果演示
http://www.njyyjy.com/j/ --------------------编程问答-------------------- 说错一下地方,dropdownlist的值不能被更新进去.而textbox的值可以. --------------------编程问答-------------------- 为啥没人回答呢? --------------------编程问答-------------------- 你可以参考一下我这个:
http://www.cnblogs.com/cathsfz/archive/2006/12/10/587925.html --------------------编程问答-------------------- up
--
补充:.NET技术 , ASP.NET