旧标题:防止动态创建的控件保留价值
旧信息: 我需要这样做的原因是因为我正在尝试为 Image 控件的必填字段验证器创建一个解决方法。我的代码的工作方式是我在按钮旁边有一个图像控件,用户单击按钮,然后被提示上传图像。我需要确保在用户进入下一阶段之前上传图像。
由于图像控件没有必填字段验证器,因此我创建了一个文本框,假设每次在回发时重新创建图像控件时都会显示图像控件的 imageURL。但是,文本框始终保留最初创建控件的值。
*注意:页面上的所有控件都是动态创建的。
我要做的第一件事是创建图像控件并将其添加到 HTML 表中。这工作正常。之后,我找到表格单元格并将文本框添加到具有图像控件的单元格中:
HtmlTableCell tc = (HtmlTableCell)customProperties.FindControl("tcControl_" + (i + 1).ToString());
RadBinaryImage rbi = (RadBinaryImage)customProperties.FindControl("CustomControl" + (i + 1).ToString());
TextBox photoValue = new TextBox();
photoValue.ID = "CustomControl" + (i + 1).ToString() + "_txt";
photoValue.Text = rbi.imageUrl;
每次我创建所有控件时都会发生这种情况。对于所有控件,它们都保留其值,这是我不希望发生这种情况的唯一控件。有谁知道如何做到这一点?或者另一种验证图像控件的方法?
感谢您的宝贵时间,感谢所有评论/答案(:
解决了:
我创建了我在此处找到的复选框列表必填字段验证器的修改版本。 这是代码:出于安全原因,我用######## 替换了命名空间。
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Telerik.Web.UI;
namespace #######################################
{
public class RequiredFieldValidatorForImages :
System.Web.UI.WebControls.BaseValidator
{
private Control _ctrl;
public RequiredFieldValidatorForImages()
{
base.EnableClientScript = false;
}
protected override bool ControlPropertiesValid()
{
Control ctrl = FindControl(ControlToValidate);
if (ctrl != null)
{
_ctrl = (Control)ctrl;
return (_ctrl != null);
}
else
return false; // raise exception
}
protected override bool EvaluateIsValid()
{
try
{
Image rbi = (Image)_ctrl;
return rbi.ImageUrl != "~/images/noimages.jpg";
}
catch
{
RadBinaryImage rbi = (RadBinaryImage)_ctrl;
return rbi.ImageUrl != "~/images/noimages.jpg";
}
}
}
}