C# 用于实体更改跟踪的Asp.net事件
我有一个asp.net页面,其中有许多代表多个数据库实体的控件。我希望跟踪这些实体的任何数据何时更改 如果我添加一个页面成员,如C# 用于实体更改跟踪的Asp.net事件,c#,asp.net,C#,Asp.net,我有一个asp.net页面,其中有许多代表多个数据库实体的控件。我希望跟踪这些实体的任何数据何时更改 如果我添加一个页面成员,如 public Page1 : System.Web.UI.Page { protected bool Entity1HasChanged { get;set; } protected void RegisterChange(object sender, EventArgs e) { Entity1HasChanged = t
public Page1 : System.Web.UI.Page
{
protected bool Entity1HasChanged { get;set; }
protected void RegisterChange(object sender, EventArgs e)
{
Entity1HasChanged = true;
}
}
然后,对于每个控件OnTextChanged事件或等效事件,我调用一个方法,将此布尔值设置为true
然后,我想在所有控制事件完成后运行一个方法,该方法执行一些数据库更新。我可以连接到哪个页面事件来执行此操作?在LoadComplete事件上读取页面时,它仅表示所有加载事件都已完成
有人知道我应该如何做到这一点吗?我这样做完全是错误的吗
谢谢
伊恩把和作为你的出发点 把和作为你的出发点 尝试使用预渲染
这还允许您在完成数据库操作后修改页面输出(例如,如果您想显示一个状态框,表示操作已完成)。请尝试使用PreRender
这还允许您在完成数据库操作后修改页面输出(例如,如果您想显示一个状态框,表示操作已完成)。这是一个非常好的问题。我胡乱搞了些我认为会奏效的东西。您可以创建从TextBox继承的won TextBox:
namespace ServerControl1
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")]
public class TextBoxWithChange : TextBox
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public bool HasEntityChanged
{
get
{
bool hasEntityChanged = (bool) ViewState["HasEntityChanged"];
return hasEntityChanged;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
命名空间服务器控制1
{
[默认属性(“文本”)]
[ToolboxData(“”)
公共类TextBoxWithChange:TextBox
{
[可装订(真实)]
[类别(“外观”)]
[默认值(“”)
[可本地化(正确)]
公共图书馆已经被改变了
{
得到
{
bool hasEntityChanged=(bool)视图状态[“hasEntityChanged”];
返回已更改的实体;
}
}
受保护的覆盖无效渲染内容(HtmlTextWriter输出)
{
输出。写入(文本);
}
}
}
然后,您可以编写一个小jQuery脚本,在客户端OnTextChanged事件触发时更改该属性。在提交表单时,您可以查询这些文本框的HasEntityChanged属性
对于本例,我将服务器控件放在它自己的库中,并按如下方式注册它:
<%@ Register TagPrefix="MyCompanyName" Namespace="ServerControl1" Assembly="ServerControl1" %>
<MyCompanyName:TextBoxWithChange ID="ChangerTextBox" runat="server" HasEntityChanged="false"></MyCompanyName:TextBoxWithChange>
然后,您可以在页面上声明它,如下所示:
<%@ Register TagPrefix="MyCompanyName" Namespace="ServerControl1" Assembly="ServerControl1" %>
<MyCompanyName:TextBoxWithChange ID="ChangerTextBox" runat="server" HasEntityChanged="false"></MyCompanyName:TextBoxWithChange>
这是一个非常好的问题。我胡乱搞了些我认为会奏效的东西。您可以创建从TextBox继承的won TextBox:
namespace ServerControl1
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")]
public class TextBoxWithChange : TextBox
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public bool HasEntityChanged
{
get
{
bool hasEntityChanged = (bool) ViewState["HasEntityChanged"];
return hasEntityChanged;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
命名空间服务器控制1
{
[默认属性(“文本”)]
[ToolboxData(“”)
公共类TextBoxWithChange:TextBox
{
[可装订(真实)]
[类别(“外观”)]
[默认值(“”)
[可本地化(正确)]
公共图书馆已经被改变了
{
得到
{
bool hasEntityChanged=(bool)视图状态[“hasEntityChanged”];
返回已更改的实体;
}
}
受保护的覆盖无效渲染内容(HtmlTextWriter输出)
{
输出。写入(文本);
}
}
}
然后,您可以编写一个小jQuery脚本,在客户端OnTextChanged事件触发时更改该属性。在提交表单时,您可以查询这些文本框的HasEntityChanged属性
对于本例,我将服务器控件放在它自己的库中,并按如下方式注册它:
<%@ Register TagPrefix="MyCompanyName" Namespace="ServerControl1" Assembly="ServerControl1" %>
<MyCompanyName:TextBoxWithChange ID="ChangerTextBox" runat="server" HasEntityChanged="false"></MyCompanyName:TextBoxWithChange>
然后,您可以在页面上声明它,如下所示:
<%@ Register TagPrefix="MyCompanyName" Namespace="ServerControl1" Assembly="ServerControl1" %>
<MyCompanyName:TextBoxWithChange ID="ChangerTextBox" runat="server" HasEntityChanged="false"></MyCompanyName:TextBoxWithChange>
这将起作用,但每个页面都需要这样做。这将不会遵循枯燥的原则这将工作,但每一页将需要这样做。它不会遵循干燥原理