Ошибка в элементе управления RequiredFieldValidator
.aspx file:
Почтовый индекс:
<asp:TextBox runat="server" ID="txtPostalCode" CssClass="inputs" /><br />
<asp:RegularExpressionValidator ID="regPostalCode" runat="server" ErrorMessage="Should be 5 Digits" ControlToValidate="txtPostalCode" ValidationExpression="\d{5}"></asp:RegularExpressionValidator>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtPostalCode"
Display="Dynamic" EnableClientScript="False" onload="RequiredFieldValidator1_Load"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Cannot be left blank"
Display="Dynamic" ControlToValidate="txtPostalCode" onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
Файл.aspx.cs:
protected void RequiredFieldValidator1_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
//get which input TextBox will be validated.
TextBox tx = (TextBox)this.FindControl(
RequiredFieldValidator1.ControlToValidate);
if (string.IsNullOrEmpty(tx.Text))
{
RequiredFieldValidator1.ErrorMessage =
"Required field cannot be left blank.";
}
}
}
protected void CustomValidator1_ServerValidate(object source,ServerValidateEventArgs args)
{
//Test whether the length of the value is more than 6 characters
if (args.Value.Length <= 5)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}
Он показывает мне ошибку в строке: if (string.IsNullOrEmpty(tx.Text)) Сведения об исключении: System.NullReferenceException: Ссылка на объект не установлена на экземпляр объекта. Я не уверен, что делать, если кто-то поможет мне в этом, я буду очень благодарен.
2 ответа
Проблема, скорее всего, связана с FindControl
метод не находит текстовое поле. Если вы используете главную страницу, попробуйте использовать рекурсивный метод FindControl, как показано ниже. Для параметра Root вы можете передать this.Master
и Id будет вашим RequiredFieldValidator1.ControlToValidate
,
TextBox tx = (TextBox)FindControlRecursive(this.Master, RequiredFieldValidator1.ControlToValidate);
Recusive FindControl:
public static Control FindControlRecursive(Control Root, string Id)
{
if (Root.ID == Id)
return Root;
foreach (Control Ctl in Root.Controls)
{
Control FoundCtl = FindControlRecursive(Ctl, Id);
if (FoundCtl != null)
return FoundCtl;
}
return null;
}
Ссылка на метод IsNullOrWhiteSpace
http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx
Указывает, является ли указанная строка Nothing, пустой или состоит только из символов пробела.
Вы могли бы сделать что-то вроде этого:
if (String.IsNullOrEmpty (tx.Text) || tx.Text.Trim().Length == 0)
String.IsNullOrEmpty
метод, использованный выше, эквивалентен:
if (tx.Text == null || tx.Text == String.Empty)
Это означает, что вам все еще нужно проверить ваш случай "IsWhiteSpace" с помощью.Trim().Length == 0 в соответствии с примером.
Ссылка на метод IsNullOrEmpty
http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx
Указывает, является ли указанная строка пустой или пустой строкой.
В вашем примере вы хотите убедиться, что ваша строка имеет значение, что означает, что вы хотите обеспечить строку:
- Не является нулевым
- Не пустая строка (String.Empty / "")
- Это не просто пробел