我希望能够在不依赖事件的情况下(例如OnTextChange事件)找到asp.net控件的旧值(文本框,复选框等)。像“someTextboxControl.OldText”这样的东西将是完美的!我想它存储在viewstate中,需要通过自定义控件以某种方式获取它。有什么想法吗?
答案 0 :(得分:3)
Shrage提供的答案很有帮助,但需要进行一些额外的搜索才能使此解决方案正常工作。我将他的代码放在我正在处理的页面的命名空间中的代码中。另外,我必须注册控件,并更改相关控件的更新。
注册扩展的textboxex控件;这就在页面指令
的正下方 <%@ Register TagPrefix="group" Namespace="ESM_Web_Portal" Assembly="ESM Web Portal" %>
更新要在aspx页面中扩展的texbox
<group:TextBoxEx ID="txbEditPartNumber" runat="server" Text='<%# Bind("part_number") %>'></group:TextBoxEx>
然后在代码后面我能够使用扩展的TextBox控件
protected void CheckForExistingPartNumber(object sender, ServerValidateEventArgs e)
{
CustomValidator cv = ((CustomValidator)sender);
TextBoxEx tb = (TextBoxEx)cv.Parent.FindControl(cv.ControlToValidate);
if (SupplyBLL.GetSupplyByPartNumber(e.Value) != null && tb.Text != tb.OldText)
{
e.IsValid = false;
}
}
答案 1 :(得分:0)
public class TextBoxEx:System.Web.UI.WebControls.TextBox
{
public string OldText { get; set; }
protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
OldText = Text;
return base.LoadPostData(postDataKey, postCollection);
}
}