C#类null引用

时间:2011-12-24 11:55:54

标签: c# model-view-controller

我正在使用Ajax从服务器返回值,但在调用方法incrementvalue()时,_value具有空引用,即使它先前已在intialisevalue()中设置方法。我在下面有一些示例代码。

public class test
{
    public int value;

    public void increment(int _value)
    {
        value = value + _value;
    }

    public void setvalue(int _value)
    {
        value = _value;
    }
}

public test _value;

public JsonResult intialisevalue()
{
    _value = new test();
    _value.setvalue(9);

    return Json(_value);
}

public JsonResult incrementvalue()
{
    _value.increment(2);
    return Json(_value);
}

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

控制器仅存在于请求中。在发送响应之后,控制器被丢弃。因此,test不再存在。你需要将测试对象传递给控制器​​

public JsonResult incrementvalue(test t, increment i)
{
      t.increment(i);
      return Json(t);
}

答案 1 :(得分:0)

在调用控制器之间不保留您的值。当您调用incrementvalue方法时,它正在使用该字段的新副本。您可能会发现它抛出异常,因为_value为null。

当你调用控制器时,你应该将值的副本传递给incrementvalue方法,然后递增并返回它。

答案 2 :(得分:0)

您没有在以下方法中为_value分配新的引用。

public JsonResult incrementvalue()
{
    _value.increment(2);
    return Json(_value);
}

你应该修改如下。

public JsonResult incrementvalue()
{
    _value=new Test();   //Assigns a new reference to `_value`
    _value.increment(2);
    return Json(_value);
}

答案 3 :(得分:0)

您需要重新初始化_value每次调用服务器。 HTTP是无状态的,您的变量不会在请求之间保持状态。