C# 如何让标签显示错误
可能重复:C# 如何让标签显示错误,c#,if-statement,C#,If Statement,可能重复: 现在我有5个文本框,当其中任何一个字段留空时,它会将框变为黄色,并在我的标签中输出名为“lblError”的语句。以下错误“”请输入有效数据!“这列在我的catch语句中。我希望lblError输出我为每个文本框列出的文本语句。因此,如果名字和姓氏为空,lblError将输出这两条消息。我是C#新手,因此对我来说有点困惑 public partial class frmPersonnel : System.Web.UI.Page { protected void btnSu
现在我有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;
}
以上只是其中一项检查的示例
我建议将公共逻辑提取到它自己的方法中并重用它(例如,只需将错误消息和要检查的控件作为参数传递)。您需要连接错误消息-如果发现错误,连接并添加新行,如果没有,只需使用新的错误消息:
if(string.IsNullOrWhiteSpace(lblError.Text))
{
lblError.Text = "Please enter last name!";
}
else
{
lblError.Text += "Please enter last name!" + Environment.NewLine;
}
以上只是其中一项检查的示例
我建议将公共逻辑提取到自己的方法中并重用它(例如,只需将错误消息和要检查的控件作为参数传递即可)。您可以这样做
添加+=例如lblError.Text+=“请输入名字”
这将附加到文本框中已有的文本
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!";
}
}
}
实际上,我建议您考虑使用验证控件。它们很容易添加到您的表单中。在这种情况下,它们将帮助您完成此操作
添加+=例如lblError.Text+=“请输入名字”
这将附加到文本框中已有的文本
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
- 在StringBuilder中存储每个无效字段的错误消息
- 如果StringBuilder在流程结束时包含任何内容
将收集的错误消息输出到
控件lblError
- 你可以-
dt1 = DateTime.Parse(txtStartDate.Text);
dt2 = DateTime.Parse(txtEndDate.Text);
如果作为参数传入的文本字符串不能准确解析为DateTime值,则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 />";
lblError.Text+=“请输入名字
”;
或者,您可以使用StringBuilder根据需要追加消息,然后将其应用于消息末尾的错误标签。主要问题是,您的方法引发了异常,这就是为什么您只获取catch块中定义的消息。我怀疑错误是由t引发的他的代码:
dt1 = DateTime.Parse(txtStartDate.Text);
dt2 = DateTime.Parse(txtEndDate.Text);
如果作为参数传入的文本字符串不能准确解析为DateTime值,则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 />";
lblError.Text+=“请输入名字
”;
或者,您可以使用StringBuilder根据需要附加消息,然后将其应用于消息末尾的错误标签。检查空字符串时,最好使用string.IsNullOrEmpty
假设标签是单行标签,则它只能显示一个内容。每当您指定Text属性时,之前存储的任何文本都将被覆盖。如果必须显示多个内容,则应使用显示更多文本的控件并将其附加。只有在try bloc中引发异常时,您才会点击catch块k、 检查空字符串时,最好使用string.IsNullOrEmpty
假设标签是单行标签,则它只能显示一个内容。每当您指定Text属性时,之前存储的任何文本都将被覆盖。如果必须显示多个内容,则应使用显示更多文本的控件并将其附加。只有在try bloc中引发异常时,您才会点击catch块k、 一个想法是声明一个
IDisposable
类来收集所有验证错误。这个类负责收集错误消息,并在上下文被释放时抛出它们(如果有的话)。(例如,当using到达结束括号时) 并定义
ValidationContext
,如下所示:
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添加一个
,并从应用程序/库的所有部分调用ValidationContext.Current.AddError()
。一个想法是声明一个IDisposable
类来收集所有验证错误。
这个类负责收集错误消息,并在上下文被释放时抛出它们(如果有的话)。(例如,当using到达结束括号时)
并定义