C# ASP.NET使用接口在类之间传递值

C# ASP.NET使用接口在类之间传递值,c#,asp.net,interface,C#,Asp.net,Interface,在开发桌面应用程序时,我通常使用静态实现,而在ASP.NET中使用静态实现时,我的头撞到了墙上(这不是一个好主意) 我想我在这里看到了一些反馈,您可以使用接口在类和页面之间传递值,而无需使用会话 你们能举一个很好的例子来说明如何实现我的问题吗?谢谢 这是我的示例代码 public interface ISessionManager { SessionStates sesState { get; set; } } public struct SessionStates { pub

在开发桌面应用程序时,我通常使用静态实现,而在ASP.NET中使用静态实现时,我的头撞到了墙上(这不是一个好主意)

我想我在这里看到了一些反馈,您可以使用接口在类和页面之间传递值,而无需使用会话

你们能举一个很好的例子来说明如何实现我的问题吗?谢谢

这是我的示例代码

public interface ISessionManager { SessionStates sesState { get; set; } } public struct SessionStates { public string SessionID; public bool isLoggedIn; public string Username; } 公共接口ISessionManager { SessionStates sesState{get;set;} } 公共结构会话状态 { 公共字符串SessionID; 公共布尔伊斯洛格丁; 公共字符串用户名; }
使用会话状态对象

会话[“variable_name”]=在一个类中指定任何值,并在任何其他类中使用此会话状态对象

比如说,

使用System.Web.SessionState

//将值存储在一个类中的会话状态对象中

Session[“sessionid”]=Request.QueryString.Get(“Session_key”).ToString()

//在另一个类中使用会话状态对象


字符串sessionid=Session[“sessionid”].ToString()

无论如何,我决定用另一种方式来做,我称之为SessionManager。我只是不想每次使用会话变量名时都输入它,这是为了防止错误输入会话变量名。。这就是我想到的

using System; using System.Collections; using System.Collections.Generic; using System.Web; using System.Web.SessionState; public class SessionManager : IRequiresSessionState { public SessionManager() { } string _sessionID = string.Empty; public string SessionID { get { if (Get("SessionID") == null) Save("SessionID", string.Empty); return Get("SessionID").ToString(); } set { this._sessionID = value; Save("SessionID", value); } } bool _isLoggedIn = false; public bool isLoggedIn { get { if (Get("isLoggedIn") == null) Save("isLoggedIn", false); return Convert.ToBoolean(Get("isLoggedIn").ToString()); } set { this._isLoggedIn = value; Save("isLoggedIn", value); } } string _username = string.Empty; public string Username { get { if (Get("Username") == null) Save("Username", string.Empty); return Get("Username").ToString(); } set { this._username = value; Save("Username", value); } } int _selectedCID = 0; public int SelectedCID { get { if (Get("SelectedCID") == null) Save("SelectedCID", 0); return Convert.ToInt32(Get("SelectedCID")); } set { this._selectedCID = value; Save("SelectedCID", value); } } string _selectedCIDValPath = string.Empty; public string SelectedCIDValPath { get { if (Get("SelectedCIDValPath") == null) Save("SelectedCIDValPath", 0); return Get("SelectedCIDValPath").ToString(); } set { this._selectedCIDValPath = value; Save("SelectedCIDValPath", value); } } #region methods void Save(string name, object value) { if (HttpContext.Current.Session[name] != null) { HttpContext.Current.Session[name] = value; } else { HttpContext.Current.Session.Add(name, value); } } object Get(string name) { return HttpContext.Current.Session[name]; } #endregion } 使用制度; 使用系统集合; 使用System.Collections.Generic; 使用System.Web; 使用System.Web.SessionState; 公共类会话管理器:iRequiresessionState { 公共会话管理器() { } string _sessionID=string.Empty; 公共字符串SessionID { 得到 { if(Get(“SessionID”)==null)Save(“SessionID”,string.Empty); 返回Get(“SessionID”).ToString(); } 设置 { 此值为.\u sessionID=值; 保存(“SessionID”,值); } } boolu isLoggedIn=false; 公共布尔伊斯洛格丁酒店 { 得到 { 如果(Get(“isLoggedIn”)==null)保存(“isLoggedIn”,false); 返回Convert.ToBoolean(Get(“isLoggedIn”).ToString(); } 设置 { 这。_isLoggedIn=值; 保存(“isLoggedIn”,值); } } string _username=string.Empty; 公共字符串用户名 { 得到 { 如果(Get(“Username”)==null)保存(“Username”,string.Empty); 返回Get(“Username”).ToString(); } 设置 { 这是.\u username=value; 保存(“用户名”,值); } } int _selectedCID=0; 公共int-SelectedCID { 得到 { 如果(Get(“SelectedCID”)==null)保存(“SelectedCID”,0); 返回Convert.ToInt32(Get(“SelectedCID”); } 设置 { 这是。\ u selectedCID=值; 保存(“SelectedCID”,值); } } string _selectedCIDValPath=string.Empty; 公共字符串SelectedCIDValPath { 得到 { 如果(获取(“SelectedCIDValPath”)==null)保存(“SelectedCIDValPath”,0); 返回Get(“SelectedCIDValPath”).ToString(); } 设置 { 这是。\ u selectedCIDValPath=value; 保存(“SelectedCIDValPath”,值); } } #区域方法 无效保存(字符串名称、对象值) { if(HttpContext.Current.Session[name]!=null) { HttpContext.Current.Session[name]=值; } 其他的 { HttpContext.Current.Session.Add(名称、值); } } 对象获取(字符串名称) { 返回HttpContext.Current.Session[name]; } #端区 }
我不明白这怎么可能。接口只是合同的定义。将信息从类(我假设是代码隐藏或服务器上的某个东西)传递到页面(基于客户端)涉及:a)cookie,b)viewstate,c)隐藏值或其他表单值,d)ajax调用,或e)其他一些正在逃避我的操作。接口是一个定义,而不是一个机制。谢谢D。好的,快速提问。是否可以将会话中的结构值添加为值?e、 g-SessionStates ss=新SessionStates();ss.Username=“测试”;添加(“我的会话”,ss);但是我不知道如何检索它。对不起:SessionStates ss=(SessionStates)Session[“MySession”]@Nullstr1ng-是的,您完全可以将结构值添加到会话中。并按照上面的说明检索和使用它们。那应该行得通@你认为这样管理会话变量和值好吗?使用STRUCT。依我看,我觉得没关系。