非常基本的解释:我在ConnectionClass.cs
文件中创建了一个“用户”类,需要在别处使用它(见下文,它是一个登录按钮)。
我想输入的代码是:`
namespace Vehicle_Website.Pages.Account
{
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
User user = ConnectionClass.LoginUser(txtLogin.Text, txtPassword.Text);
if (user != null)
{
//Store login variables to session
Session["login"] = user.Name;
Session["type"] = user.Type;
Response.Redirect("~/Pages/Home.aspx");
}
else
{
lblError.Text = "Login Failed";
}
}
}
}`
如果您愿意,“用户”应突出显示为“蓝色”,并认识到它是已在其他地方创建的类,除非是,并且我收到错误
“类型或名称空间”无法找到用户“
完全相同的情况适用于“ConnectionClass”行。它应该突出显示但是再说不认可。
我在其他地方创建了public class User
和public static User LoginUser(string login, string password)
,它们可以正常工作而不会出错。我不明白为什么,用简单的英语,“User”和“ConnectionClass”这两个词并不是“突出/改变颜色”并被识别。
我已尝试更改属性以进行编译,但似乎没有做任何事情。
无论您需要什么其他信息,我都乐意与您分享。
UPDATE ***
这是我的ConnectionClass.cs
文件(工作正常):
namespace Vehicle_Website.App_Code
{
public static class ConnectionClass
{
private static SqlConnection conn;
private static SqlCommand command;
static ConnectionClass()
{
string connectionString = ConfigurationManager.ConnectionStrings["DataConnection"].ToString();
conn = new SqlConnection(connectionString);
command = new SqlCommand("", conn);
}
public static User LoginUser(string login, string password)
{
//Check if user exists
string query = string.Format("SELECT COUNT (*) FROM WebsiteDB.dbo.users WHERE name = '{0}'", login);
command.CommandText = query;
try
{
conn.Open();
int amountOfUsers = (int)command.ExecuteScalar();
if(amountOfUsers == 1)
{
//User exists, check if passwords match
query = string.Format("SELECT password FROM users WHERE name = '{0}'", login);
command.CommandText = query;
string dbPassword = command.ExecuteScalar().ToString();
if(dbPassword == password)
{
//Passwords match, retrieve further information.
query = string.Format("SELECT email, user_type FROM users WHERE name = '{0}'", login);
command.CommandText = query;
SqlDataReader reader = command.ExecuteReader();
User user = null;
while (reader.Read())
{
string email = reader.GetString(0);
string type = reader.GetString(1);
user = new User(login, password, email, type);
}
return user;
}
else
{
//Passwords do not match.
return null;
}
}
else
{
//User exists
return null;
}
}
finally
{
conn.Close();
}
}
}
}
更新
所以我想我可能已经找到了问题但不知道如何修复:
基本上我的login.aspx.cs页面没有“链接”到我的ConnectionClass.cs
我的意思是,我在login.aspx.cs页面上创建了以下行:
Session["login"] = user.Name;
当我尝试在我的ConnectionClass.cs文件上使用".Name"
时,它无法识别:
user.Name);
关于如何确保两个页面都在进行通信的任何想法?我已经尝试纠正命名空间,因此它们都没有运气匹配...
答案 0 :(得分:0)
您是否在与登录按钮相同的项目中安装了ConnectionClass?如果不是,则必须添加对包含ConnectionClass的项目的引用。
另外,你的ConnectionClass是静态的吗?如果不是这样的话,如果没有首先创建一个像这样的类的实例,你将无法使用它:
$(function() {
var form = $('#editRes'); // this is a jQuery object
var formMessages = $('#formMsg'); // this is also a jQuery object
// Set up an event listener for the contact form.
form.submit(function (e) {
// Stop the browser from submitting the form.
e.preventDefault();
// do the validation here
if (!validateLog()) {
return;
}
// Submit the form using AJAX.
$.ajax({
type: 'POST',
url: window.location.href,
data: form.serialize()
}).done(function(response) {
// Make sure that the formMessages div has the 'success' class.
formMessages.removeClass('error').addClass('success');
// Set the message text.
formMessages.html(response); // < html();
// Clear the form.
$('').val('')
}).fail(function(data) {
// Make sure that the formMessages div has the 'error' class.
formMessages.removeClass('success').addClass('error');
// Set the message text.
var messageHtml = data.responseText !== '' ? data.responseText : 'Oops! An error occured!.';
formMessages.html(messageHtml); // < html()
});
});
function validateLog() {
var valid = true;
//VALIDATE HERE
return valid;
}
});
答案 1 :(得分:0)
您必须使用该课程的全名。当访问嵌套类时,这就是ConnectedClass.User。默认情况下,嵌套类是私有的,因此也要确保使用正确的访问修饰符
答案 2 :(得分:0)
清楚地看到这一行
public static class ConnectionClass
根据代码,它是一个静态类,也可以看到这个构造函数!
static ConnectionClass()
{
string connectionString = ConfigurationManager.ConnectionStrings["DataConnection"].ToString();
conn = new SqlConnection(connectionString);
command = new SqlCommand("", conn);
}
在实例化对象期间何时调用构造函数。是 它可以实现ConnectionClass吗?根据OOPs 编程概念,你不能这样做。然后如何连接 字符串和命令将被分配!!