在这个页面中,使用了asp:UpdatePanel,我希望在PostMicroblog1中出发MicroBlogPosted事件,然后刷新用户控件ViewMicroBlogs1。但是事件触发以后ViewMicroBlogs1并没有被刷新,Page_Load函数没有调用。
<uc2:PostMicroblog ID="PostMicroblog1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<uc3:ViewMicroBlogs ID="ViewMicroBlogs1" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="PostMicroblog1"
EventName="MicroBlogPosted" />
</Triggers>
</asp:UpdatePanel>我在PostMicroblog1中这样声明的事件。
public delegate void PostEventHandler(object sender, EventArgs e);
public event PostEventHandler MicroBlogPosted;
在PostMicroblog1中引发事件:
if (MicroBlogPosted != null)
{
MicroBlogPosted(this, new EventArgs());
}实在看不出哪里有错,请各位大神指教
<uc2:PostMicroblog ID="PostMicroblog1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<uc3:ViewMicroBlogs ID="ViewMicroBlogs1" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="PostMicroblog1"
EventName="MicroBlogPosted" />
</Triggers>
</asp:UpdatePanel>我在PostMicroblog1中这样声明的事件。
public delegate void PostEventHandler(object sender, EventArgs e);
public event PostEventHandler MicroBlogPosted;
在PostMicroblog1中引发事件:
if (MicroBlogPosted != null)
{
MicroBlogPosted(this, new EventArgs());
}实在看不出哪里有错,请各位大神指教
解决方案 »
- Asp.Net中的TextBox控件获取焦点时自动换行
- 是XML快,还是SQL快,哪个数据量传输大
- 有关数据库的导入和导出问题.解决后马上给分,在线等!!!!!!!!!!!!
- 安全方面的学习,求指导
- |M| 大家看看这条绑定语句可不可以怎么忧化
- 请教一个关于VS2003打开工程出现的问题,请高人指点。
- 怎么实现根据查询出来的图片动态的放到页面上,页面宽度固定而长度动态改变
- 程序发送邮件提示错误C#
- 程序运行时有时会报以下错误,该什么办法解决!!!!
- 有无办法将输入的文字自动生成HTML代码??
- 网页中内嵌swf格式的视频
- 新手在学习Scott的ASP.NET MVC 1.0的NerdDinner例子时遇到的问题
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><%@ Register Src="PostMicroblog1.ascx" TagName="PostMicroblog1" TagPrefix="uc1" %>
<%@ Register Src="ViewMicroBlogs1.ascx" TagName="ViewMicroBlogs1" TagPrefix="uc2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
body, td, th
{
font-size: 12px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<uc1:PostMicroblog1 ID="PostMicroblog1" runat="server" />
<uc2:ViewMicroBlogs1 ID="ViewMicroBlogs1" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="PostMicroblog1" EventName="MicroBlogPosted" />
</Triggers>
</asp:UpdatePanel>
</form>
</body>
</html>Default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PostMicroblog1.MicroBlogPosted += new global::PostMicroblog1.PostEventHandler(PostMicroblog1_MicroBlogPosted);
} protected void PostMicroblog1_MicroBlogPosted(object sender, EventArgs e)
{
ViewMicroBlogs1.Text = "文本";
}
}
PostMicroblog1.ascx放一个ButtonPostMicroblog1.ascx.cs代码
public partial class PostMicroblog1 : System.Web.UI.UserControl
{
public delegate void PostEventHandler(object sender, EventArgs e);
public event PostEventHandler MicroBlogPosted; protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (MicroBlogPosted != null)
{
MicroBlogPosted(this, new EventArgs());
}
}
}
ViewMicroBlogs1.ascx放一个LabelViewMicroBlogs1.ascx.cs代码
public partial class ViewMicroBlogs1 : System.Web.UI.UserControl
{
public string Text {
get
{
if (ViewState["ViewText"] != null)
{
return ViewState["ViewText"].ToString();
}
return "No";
}
set
{
ViewState["ViewText"] = value;
Label1.Text = Text;
}
} protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Text;
}
}
已测试代码自己修改及优化
<asp:AsyncPostBackTrigger ControlID="PostMicroblog1" EventName="MicroBlogPosted" />
</Triggers>
如果你把触发器注释掉,会发现程序的功能和以前一模一样,完全是按钮点击所引起的回发,和事件MicroBlogPosted没关系啊。
UpdatePanel1.Update();不过你的代码仍然不具有代表性。通常用户控件自己内部有UpdatePanel,用户控件自己负责刷新自己内部的界面。根本没有必要把ViewMicroBlogs1放在UpdatePanel1内部。正常地设计时序应该是,PostMicroblog1改变了某种状态而抛出事件,这个事件触发页面上的代码并且将事件参数相关的值或者PostMicroblog1相关的值传递给ViewMicroBlogs1。而这两个控件自己负责刷新自己内部的UpdatePanel。在你的页面上根本不需要放UpdatePanel控件。
两个用户控件,uc1负责发消息,uc2负责将消息显示出来。现在uc1和uc2在一个UpdatePanel中,那么uc1里面怎么调用Update方法?不用触发器,让uc1的按钮点击后自然刷新,那么页面先刷新后执行Button
_Click中的代码,我刚发的消息也不能立即显示出来,还需要再刷新一次……这不是很头疼吗?