2011-12-24 38 views
1

我使用Ajax從服務器恢復值,但在調用方法incrementvalue()時,_value具有空引用,即使它在之前的intialisevalue()方法中已設置。下面有一些示例代碼。C#類空引用

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); 
} 

任何想法?

+0

總之,控制器不是有狀態的,因此您不能在控制器之間存儲數據請求。 – 2011-12-24 12:06:32

回答

0

在對控制器的調用之間不會保留您的值。當您調用incrementvalue方法時,它正在處理該字段的新副本。您可能會發現它拋出異常,因爲_value爲空。

當您調用控制器時,您應該將值的副本傳遞給incrementvalue方法,然後將其增加並再次返回。

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); 
} 
+0

這樣可以解決可能發生的錯誤,但是當你調用incrementvalue方法時,你只會回到2,並且聽起來不像incrementvalue那樣做。 – Hammerstein 2011-12-24 12:06:18

0

你需要重新初始化_value每次調用服務器。 HTTP是無狀態的,你的變量不會在請求之間保持它們的狀態。

1

控制器只存在於請求中。在發送響應之後,控制器被處置。因此,test不再存在。您需要將測試對象傳入控制器

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