Session成功设置了值,但在MVC 5中为null

时间:2015-09-21 06:04:16

标签: c# asp.net-mvc session

我正在开发一个MVC 5应用程序,我在我的应用程序中有一个特定的Controller for Session变量,它有6个会话,并且一切正常。现在我想使用另一个会话,所以我在Session控制器中声明它如下:

public int tempResult
{
     get { return Convert.ToInt32(Session["tempResult"]); }
     set { Session["tempResult"] = value; }
}

现在我有一个继承自Session Controller的Controller A,它将方法中的会话变量tempResult设置为:

[HttPPost]
public JsonResult COAcodelength(MST m)
{       
     var s = (from sets in db.ABCs where sets.name == "Name" && sets.pre.ToString() == m.house select sets.Id).Single().ToString();
     tempResult = Convert.ToInt32(s);
}

现在,继承自Session Controller的Controller B正在调用Controller A的方法,在该方法中,我试图访问tempResult的会话值:

[HttpPost]
public ActionResult New([Bind(Include = "Id,Name,House,Number")] MST tr)
{    
    tr.Name = r.Ccode(tr); // r is the instance of Controller A
    db.MSTs.Add(tr);
    db.SaveChanges();
    return Json(tr);
}

控制器A中的 Ccode 方法如下:

public string Ccode (MST tr)
{
    int q = tempResult;
    tr.Name = q.ToString() + tr.House;
    return tr.Name; 
}

因此,当Controller A中的Ccode方法试图获取 tempResult 的值时,它将返回带有Object引用错误的null。

可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

你不能将null转换为int 32,这意味着如果你的tempResult可以为null,你应该像这样使用它:

public int? tempResult
{
     get { return Convert.ToInt32(Session["tempResult"]); }
     set { Session["tempResult"] = value; }
}

然后允许整数变量接受null。

int?表示整数变量可以为空。