请教高手:asp.net用户控件如何实现二次加载。

善缘2022 2012-11-27 11:30:30
我做了一个用户控件,在页面里面加载了这个控件并且给他赋值,页面里面有一个按钮,点击后想再次改变用户控件的值,结果值没有改变。后来发现再次点击按钮的时候用户控件没有进IsPostback里面,但是用户控件里面的IsPostBack又不能去掉。请教如何解决这个问题。
用户控件代码如下:

public partial class LabexEx : System.Web.UI.UserControl
{
public string time;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.Label1.Text = time;
}
}
}
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LabexEx.ascx.cs" Inherits="UserControlRefresh.LabexEx" %>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>




页面代码:

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lael1.time = DateTime.Now.ToString("HH:mm:ss");
}

protected void Button1_Click(object sender, EventArgs e)
{
lael1.time = DateTime.Now.ToString("HH:mm:ss");
}


}

<%@ Page Title="主页" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="UserControlRefresh._Default" %>

<%@ Register Src="~/LabexEx.ascx" TagName="LabexEx" TagPrefix="uc1" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<uc1:LabexEx runat="server" ID="lael1"></uc1:LabexEx>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="刷选控件的值" />
<br />
</asp:Content>


...全文
215 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
善缘2022 2012-11-28
  • 打赏
  • 举报
回复
引用 6 楼 JBeta01 的回复:
这样子肯定不可以 你只是给time这个变量赋值 又不是给text控件赋值 把你要做的操作写到一个public方法里 如 public void setTime(string time){ this.Label1.Text = time; } 然后 !IsPostBack 里面调这个setTime(time)。 然后你在外面想改变值的时候 protec……
谢谢JBeta01 ,按照你的思路问题已经解决。
善缘2022 2012-11-27
  • 打赏
  • 举报
回复
引用 1 楼 aluogang 的回复:
为什么不能去掉,单从你贴出来的代码看,根本不需要加!ispostback
这个只是个例子,我是想通过这个例子解决项目中遇到的实际问题,这个isPostback在项目中是不能去掉的。
aluogang 2012-11-27
  • 打赏
  • 举报
回复
为什么不能去掉,单从你贴出来的代码看,根本不需要加!ispostback
最恨起昵称 2012-11-27
  • 打赏
  • 举报
回复
这样子肯定不可以 你只是给time这个变量赋值 又不是给text控件赋值 把你要做的操作写到一个public方法里 如 public void setTime(string time){ this.Label1.Text = time; } 然后 !IsPostBack 里面调这个setTime(time)。 然后你在外面想改变值的时候 protected void Button1_Click(object sender, EventArgs e) { lael1.setTime(新的值); } 这样子就搞定了 不了解可加我 QQ:496809513 嘿嘿
  • 打赏
  • 举报
回复
你可以在用户控件里设定一个属性,想一下面向对象的思想,然后在这个属性的Set中将从外部获取过来的值赋值到内部的按钮上,它这里有一个层级关系,对于外面这个页面来说,这个用户控件是一个整体,而这个按钮又位于用户控件内部,只有通过用户控件这个桥梁,间接的为里边的按钮赋值,试一下吧,在用户控件类设定一个属性试试
踏平扶桑 2012-11-27
  • 打赏
  • 举报
回复
定义个static类型的变量,第一次加载这个值为0(比如)就执行正常绑定操作,否则按照这个值的条件进行显示或加载。
善缘2022 2012-11-27
  • 打赏
  • 举报
回复
为啥没有人帮我看下。自己顶一个

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧