下面是我的简单页面的提交按钮单击的代码。我正在提交一个空表格,但是没有显示服务器验证错误消息。我的代码有什么问题?当我单击提交时,页面只是空白,什么也没有发生。我也无法附加调试器。
[当我构建我的网站项目时,它也没有显示任何编译错误。我不知道我在做什么错。
protected void btnSubmit_Click(object sender, EventArgs e)
{
// Need to Validate All Required Fields before redirecting to frmPersonalVerified.aspx
bool blnFormIsValid = true;
DateTime dtEndDate;
DateTime dtStartDate;
// Get Date because we have a value.
dtEndDate = DateTime.Parse(txtEndDate.Text);
// Get Date because we have a value.
dtStartDate = DateTime.Parse(txtStartDate.Text);
if (txtFirstName.Text.Trim() == "")
{
txtFirstName.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter first name.";
blnFormIsValid = false;
}
else
{
lblError.Text = "";
txtFirstName.BackColor = System.Drawing.Color.White;
blnFormIsValid = true;
}
if (txtLastName.Text.Trim() == "")
{
txtLastName.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter last name.";
blnFormIsValid = false;
}
else
{
lblError.Text = "";
txtLastName.BackColor = System.Drawing.Color.White;
blnFormIsValid = true;
}
if (txtPayRate.Text.Trim() == "")
{
txtPayRate.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter pay rate.";
blnFormIsValid = false;
}
else
{
lblError.Text = "";
txtPayRate.BackColor = System.Drawing.Color.White;
blnFormIsValid = true;
}
if (txtStartDate.Text.Trim() == "")
{
txtStartDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter start date.";
blnFormIsValid = false;
}
else
{
lblError.Text = "";
txtStartDate.BackColor = System.Drawing.Color.White;
blnFormIsValid = true;
}
if (txtEndDate.Text.Trim() == "")
{
txtEndDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please enter end date.";
blnFormIsValid = false;
}
else
{
lblError.Text = "";
txtEndDate.BackColor = System.Drawing.Color.White;
blnFormIsValid = true;
}
// Compare Dates
if (DateTime.Compare(dtStartDate, dtEndDate) >= 0)
{
txtStartDate.BackColor = System.Drawing.Color.Yellow;
txtEndDate.BackColor = System.Drawing.Color.Yellow;
lblError.Text = "Please make sure that start date is less than end date.";
blnFormIsValid = false;
}
else
{
lblError.Text = "";
txtStartDate.BackColor = System.Drawing.Color.White;
txtEndDate.BackColor = System.Drawing.Color.White;
blnFormIsValid = true;
}
if (blnFormIsValid == true)
{
//Assign a value to the session variable.
Session["FirstName"] = txtFirstName.Text;
Session["LastName"] = txtLastName.Text;
Session["PayRate"] = txtPayRate.Text;
Session["StartDate"] = txtStartDate.Text;
Session["EndDate"] = txtEndDate.Text;
// Sends A Request from the Browser to the server.
Response.Redirect("frmPersonalVerified.aspx");
}
}
我刚刚使用了.Equals(“”)...,它不起作用。仍显示空白页
忽略正确的方法是使用ASP.NET的内置验证工具这一事实,问题在于程序的逻辑已损坏。
您正在使用blnFormIsValid
存储表单的有效性,但是它的值没有意义,因为您在分配它时没有注意先前的状态。
如果我使用这些值提交您页面的表单...
txtFirstName = "" // this is invalid
txtLastName = "foo" // this is valid
...然后,它将正确地使第一次验证失败,并且blnFormIsValid
将为false,但是仅由于txtLastName的值有效,您的下一个检查将忽略blnFormIsValid
的状态并将其设置为true
。
此问题不是由于我们缺乏对ASP.NET的理解或知识,而是由于基本的编程和逻辑。一个简单的代码逐步调试过程就会发现这一点。
以下是我的建议列表:
<input type="text" id="firstName" runat="server" />
<asp:RequiredValidator runat="server" controlToValidate="firstName" />
void Page_Load() {
if( Page.IsPostBack) {
Page.Validate();
if( Page.IsValid ) {
// that's all you have to do
}
}
[这是在标识符前加上用于标识其类型的标签,例如“ blnFormIsValid”或“ txtFirstName”。只需使用“ formIsValid”或“ firstName”即可。匈牙利语表示法仅在编辑器未提供键入信息的环境中使用。
foo == true
...,因为该运算将得出与foo
相同的值。在您的情况下,应使用if( formIsValid )
而不是if( formIsValid == true )
。避免不必要地使用==
运算符可以帮助避免意外使用=
赋值运算符而不是==
相等运算符的情况(并使代码更具可读性)。