2014-04-24 56 views
-4
protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (username.Text == "test" && password.Text == "test") 
     Response.Cookies ["TheCookie"]["Username"] = username.Text; 
     Response.Redirect("loggedIn.aspx"); 
    else 
     Label1.Text = "Invalid Username and/or Password."; 
} 

上面是我试图做的一个功能。出于某种原因,这里的else语句没有被接受。我不知道为什么。任何帮助,将不胜感激。.Net其他声明

+1

如果你在一个if分支上有多个语句,那么你需要一个封闭块'{}'。 –

+2

阅读错误信息;它具体告诉你什么是问题。在向别人求助时,你也应该总是包括相关的错误信息,而不是仅仅说没有解释就无法工作。 – Servy

+2

空白被忽略。你的缩进是误导性的:你的'Response.Redirect'没有被包含在'if'中,你的'else'是没有意义的。 –

回答

6
if (username.Text == "test" && password.Text == "test") 
{ 
    Response.Cookies ["TheCookie"]["Username"] = username.Text; 
    Response.Redirect("loggedIn.aspx"); 
} 
else 
    Label1.Text = "Invalid Username and/or Password."; 

用括号括住它,否则它会采取只剩下一立即行(声明)为条件的一部分。

即使是一条线if/else也是一个很好的做法,因为它使维护更容易。

else 
{ 
    Label1.Text = "Invalid Username and/or Password."; 
} 
+1

有些解释会很好。提问者不会仅仅从代码块中学习。另请注意,“由错误造成”是Stack Overflow的正式关闭原因。 –

+0

谢谢,它工作! – user3046033

0

if-else (C# Reference) - MSDN

无论是当时的声明和其他语句可以由一个 语句或多个语句括在大括号{})的。对于单个声明,大括号是可选的,但建议使用 。

在if语句的then(true)部分中有多条语句。虽然您使用了缩进,但编译器不会考虑这些空格/缩进。由于您没有指定{}来定义范围内的语句,因此仅对if范围考虑单个语句。因此错误。

您可以通过引入范围{}来解决该问题。对于单一语句,还建议使用{}(明确定义范围),因为它使代码更容易理解并且不易出错。你的代码应该是:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (username.Text == "test" && password.Text == "test") 
    { 
     Response.Cookies["TheCookie"]["Username"] = username.Text; 
     Response.Redirect("loggedIn.aspx"); 
    } 
    else 
    { 
     Label1.Text = "Invalid Username and/or Password."; 
    } 
}