我一直在閱讀由史蒂文桑德森專業ASP.NET MVC2,我仍然無法找出有關會議的東西。 在書中,他講述瞭如何使用自定義模型聯編程序基於會話開發購物車,以實現會話持久性。一切工作正常,但我無法弄清楚它是如何真正在引擎蓋下工作。 由於它是我會寫一個簡化版ASP.NET MVC會話
計數器
public class Counter
{
public int counter = 0;
public void Increment(){
counter++;
}
}
CounterController
public ActionResult Index(Counter counter)
{
counter.Increment();
return View(counter);
}
CounterCustomModelBinder
public class CounterCustomModelBinder: IModelBinder
{
private const string counterSessionKey = "_counter";
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Counter counter = (Counter)controllerContext.HttpContext.Session[counterSessionKey];
if (counter == null)
{
counter = new Counter();
controllerContext.HttpContext.Session[counterSessionKey] = counter;
}
return counter;
}
}
的代碼中有相當
的Global.asax
...
ModelBinders.Binders.Add(typeof(Counter), new CounterCustomModelBinder());
正如你看到有用來獲取會話內容的聲明 專櫃=(計數器)controllerContext.HttpContext.Session [counterSessionKey] 但是沒有關於保存進入會話的聲明。我希望後面的語句在某處: controllerContext.HttpContext.Session [counterSessionKey] = counter; 但是這段代碼沒有出現在任何地方
儘管如此,它仍然有效。 不知何故,當更新Counter對象時,會話會自動更新......但我無法理解何時何地。 感謝任何人會回覆。
是的。我做了一些實驗,它確實有效。我不得不說,我懷疑這是與參考類型有關,但在我以前的實驗中,我使用的是不是參考的int類型,因此我沒有得出結論。 無論如何非常感謝你。 – user711643 2011-05-29 07:01:59