C# Razor Web应用:如何向DBHandler实例传递控制器变量
解决C# Razor中HomeController向DBHandler传递用户名密码的问题
1. 修改DBHandler类,添加带参数的构造函数
DBHandler无法直接访问HomeController的成员变量,需要通过构造函数传参接收用户名和密码,再拼接数据库连接字符串:
public class DBHandler { private string conString; // 带参数的构造函数,接收用户名与密码 public DBHandler(string userName, string password) { // 拼接完整数据库连接字符串 conString = $"Conn;Database=DB;User ID={userName};Password={password};..."; } // 其他数据库操作方法... }
2. 修改HomeController,正确初始化DBHandler
注意原代码中privarte是拼写错误,需改为private;另外不能直接在字段初始化器中使用实例成员(myUserName、myPass),要在控制器构造函数中完成DBHandler的初始化:
public class HomeController : Controller { public string myUserName = "Michael"; public string myPass = "PassWord"; private DBHandler dbhandler; public HomeController() { // 传递参数实例化DBHandler dbhandler = new DBHandler(myUserName, myPass); } // 其他控制器方法... }
补充提示
- 如果用户名和密码是用户登录后动态获取的(而非硬编码),可以在登录逻辑更新
myUserName和myPass后,重新实例化DBHandler,或在DBHandler中添加更新连接字符串的方法。 - 硬编码密码属于不安全实践,实际项目建议用配置文件(如
appsettings.json)存储连接字符串模板,再动态替换凭据,或使用数据库连接池、身份验证服务管理登录信息。
内容的提问来源于stack exchange,提问作者Michael 7
相关产品推荐
相关产品推荐

