如何获取标签以显示错误
本文关键字:标签 显示 错误 获取 何获取 | 更新日期: 2023-09-27 18:13:58
可能重复:
文本框验证不起作用
现在我有5个文本框,当其中任何一个字段为空时,它会将框变为黄色,并在我的标签中输出名为"lblError"的语句,下面的错误是"请输入有效数据!"这列在我的catch语句中。我希望lblError输出我为每个文本框列出的文本语句。因此,如果名字和姓氏为空,lblError将同时输出这两条消息。我是C#的新手,所以这对我来说有点困惑。
public partial class frmPersonnel : System.Web.UI.Page
{
protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
DateTime dt1;
DateTime dt2;
if (txtFirstName.Text == "")
{
txtFirstName.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter first name";
}
if (txtLastName.Text == "")
{
txtLastName.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter last name!";
}
if (txtPayRate.Text == "")
{
txtPayRate.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter pay rate!";
}
if (txtStartDate.Text == "")
{
txtStartDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter start date!";
}
if (txtEndDate.Text == "")
{
txtEndDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter end date!";
}
dt1 = DateTime.Parse(txtStartDate.Text);
dt2 = DateTime.Parse(txtEndDate.Text);
if (DateTime.Compare(dt1, dt2) > 0)
{
txtStartDate.BackColor = System.Drawing.Color.Yellow;
txtEndDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Start Date must not be greater than End Date.";
}
else
{
Session["txtFirstName"] = txtFirstName.Text;
Session["txtLastName"] = txtLastName.Text;
Session["txtPayRate"] = txtPayRate.Text;
Session["txtStartDate"] = txtStartDate.Text;
Session["txtEndDate"] = txtEndDate.Text;
Server.Transfer("frmPersonalVerified.aspx");
}
}
catch (Exception)
{
lblError.Text = "Please enter valid data!";
}
}
}
您将需要连接错误消息-如果发现错误,则连接并添加新行,如果没有,则只使用新的错误消息:
if(string.IsNullOrWhiteSpace(lblError.Text))
{
lblError.Text = "Please enter last name!";
}
else
{
lblError.Text += "Please enter last name!" + Environment.NewLine;
}
以上只是一个检查的示例。
我建议将公共逻辑提取到自己的方法中并重用它(例如,只需将错误消息和要检查的控件作为参数传递(。
您可以这样做。
添加+=例如lblError.Text += "Please enter first name ";
这将附加到文本框中已有的文本中。
public partial class frmPersonnel : System.Web.UI.Page
{
protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
DateTime dt1;
DateTime dt2;
// Add this
lblError.Text = "";
if (txtFirstName.Text == "")
{
txtFirstName.BackColor = System.Drawing.Color.Yellow;
lblError.Text += "Please enter first name ";
}
if (txtLastName.Text == "")
{
txtLastName.BackColor = System.Drawing.Color.Yellow;
lblError.Text += "Please enter last name! ";
}
if (txtPayRate.Text == "")
{
txtPayRate.BackColor = System.Drawing.Color.Yellow;
lblError.Text += "Please enter pay rate! ";
}
if (txtStartDate.Text == "")
{
txtStartDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text += "Please enter start date! ";
}
if (txtEndDate.Text == "")
{
txtEndDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text += "Please enter end date! ";
}
dt1 = DateTime.Parse(txtStartDate.Text);
dt2 = DateTime.Parse(txtEndDate.Text);
if (DateTime.Compare(dt1, dt2) > 0)
{
txtStartDate.BackColor = System.Drawing.Color.Yellow;
txtEndDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text += "Start Date must not be greater than End Date. ";
}
else
{
Session["txtFirstName"] = txtFirstName.Text;
Session["txtLastName"] = txtLastName.Text;
Session["txtPayRate"] = txtPayRate.Text;
Session["txtStartDate"] = txtStartDate.Text;
Session["txtEndDate"] = txtEndDate.Text;
Server.Transfer("frmPersonalVerified.aspx");
}
}
catch (Exception)
{
lblError.Text = "Please enter valid data!";
}
}
}
实际上,我建议您考虑使用验证控件。它们很容易添加到您的表单中。在这种情况下,
您可以-
- 将每个无效字段的错误消息存储在StringBuilder中
- 如果StringBuilder在过程结束时包含任何内容将收集到的错误消息输出到
lblError
控件
在检查空字符串时,最好使用string。IsNullOrEmpty。
假设标签是单行标签,那么它只能显示一个内容。无论何时指定"文本"属性,之前存储的任何文本都将被覆盖。如果你必须显示多个内容,你应该使用一个显示更多文本并附加它的控件。只有在try块中抛出异常时,你才会碰到catch块。
一个想法是声明一个IDisposable
类来收集所有验证错误
这个类负责收集错误消息,并在处理上下文时抛出它们(如果有的话(。(即,当使用达到关闭支架时(
try
{
using (var cx = new ValidationContext())
{
if (this) cx.AddError("Please provide a value for ...");
if (that) cx.AddError("Please provide a value for ...");
}
}
catch (Exception ex)
{
lblError.Text = ex.Message;
}
并将CCD_ 4定义如下:
public class ValidationContext : IDisposable
{
StringBuilder Builder { get; set; }
public ValidationContext()
{
Builder = new StringBuilder();
}
public void AddError(string message) { Builder.AppendLine(message); }
public void Dispose()
{
var total = Builder.ToString().Trim();
if (total.Length > 0)
{
throw new Exception(total);
}
}
}
这是这个概念的最简单实现,您可以向它添加更多功能,以支持从代码中的任何位置(甚至嵌套方法(向ValidationContext.Current
添加错误
如果这样做,您将只能向UI中添加一个using{}
,并从应用程序/库的所有部分调用ValidationContext.Current.AddError()
。
主要问题是您的方法抛出了一个异常,这就是为什么您只得到catch块中定义的消息。我怀疑错误是由以下代码引发的:
dt1 = DateTime.Parse(txtStartDate.Text);
dt2 = DateTime.Parse(txtEndDate.Text);
日期时间。如果作为参数传入的文本字符串没有完全按照DateTime值进行解析,则Parse((将引发异常
解决此问题的方法可能是使用DateTime。TryParse((方法,它不会引发异常:
DateTime dt1 = DateTime.MinValue;
DateTime dt2 = DateTime.MinValue;
if (DateTime.TryParse(txtStartDate.Text, out dt1) &&
DateTime.TryParse(txtEndDate.Text, out dt2))
{
if (DateTime.Compare(dt1, dt2) > 0)
{
....
}
else
{
....
}
}
else
{
// set error stating date time values are not in a parsable format
}
你遇到的第二个问题是,你每次都用以下代码覆盖错误标签:
lblError.Text = "Please enter first name";
避免这种情况的一种方法是使用:
lblError.Text += "Please enter first name<br />";
或者,您可以使用StringBuilder根据需要附加消息,然后将其应用于消息末尾的错误标签。