我有一个存储int的Session。我通常会做以下事情......
if(Session["test"] == null)
现在我正在比较......
public ActionResult NumbersGame(int myNum)
{
if(Session["test"] != myNum)...
我该怎么做?
答案 0 :(得分:5)
(int)如果该会话变量为null或不是数字,则Session [“test”]将失败。请改用它......
var myNumber = Convert.ToInt32(Session["test"]);
如果'test'为null或不是数字,myNumber将为0
答案 1 :(得分:3)
将其转换为int:
if ((int) Session["test"] != myNum) ...
答案 2 :(得分:1)
检查和使用存储在Session()对象中的值的另一种方法是使用TryParse功能。
int intTest;
if (int.TryParse(Session["test"].ToString(), out intTest))
{
// intTest will have the value in Session["Test"] stored as an integer
}
我喜欢它,因为它紧凑而简单。
答案 3 :(得分:1)
简单概述我将如何做到:
它也可以解决其他问题:
首先我们定义接口:
public interface ISessionWrapper
{
int? SomeInteger { get; set; }
}
然后我们进行HttpContext实现:
public class HttpContextSessionWrapper : ISessionWrapper
{
private T GetFromSession<T>(string key)
{
return (T) HttpContext.Current.Session[key];
}
private void SetInSession(string key, object value)
{
HttpContext.Current.Session[key] = value;
}
public int? SomeInteger
{
get { return GetFromSession<int?>("SomeInteger"); }
set { SetInSession("SomeInteger", value); }
}
}
然后我们定义我们的基本控制器:
public class BaseController : Controller
{
public ISessionWrapper SessionWrapper { get; set; }
public BaseController()
{
SessionWrapper = new HttpContextSessionWrapper();
}
}
最后:
public ActionResult NumbersGame(int myNum)
{
if (SessionWrapper.SomeInteger == myNum)
//Do what you want;
}
不需要在这里施放!!如果你想测试你的控制器,你对Session没有任何问题。你只需模拟ISessionWrapper并将其传递给SessionWrapper变量。
答案 4 :(得分:0)
我会测试null(检测Session expiry),然后执行:
object value = Session["test"];
if (value == null)
{
// The value is not in Session (e.g. because the session has expired)
// Deal with this in an application-specific way, e.g. set to a default,
// reload the Session variable from the database, redirect to a home page, ...
...
}
else
{
myNumber = (int) value;
}
...
使用Convert.ToInt32
的问题是,如果你的会话已经过期,它只会返回0,这可能是不可取的,具体取决于你的应用程序。