2015-03-16 42 views
10

ViewBag temizlemenin bir yolu var mı? ViewBag'i temizle?

ViewBag

hiçbir ayarlayıcı vardır, bu yüzden sadece nulled edilemez:

ViewBag = null; 
Ben de bunun üzerine yineleme ve dinamik özelliklerinin ortadan kaldırmaya use reflection gibi olamaz

olarak yapamazsın dynamic'un bir örneğini oluşturun.

Not: Biliyorum, ViewBag kendi başına, güçlü bir şekilde yazılmamış bir kod kokusu ve temel olarak küresel değişkenlerin dev bir koleksiyonudur. Ve biz ondan uzaklaşıyoruz, ama yine de bu arada onunla ilgilenmemiz gerekiyor. ViewBag dahili olarak kullandığı gibi

cevap

12

sadece

ViewData.Clear(); 

çağırabilir.

İşte çalışma örneği - https://dotnetfiddle.net/GmxctI. Eğer yorumsuz yorumladı çizgi, ardından metin Burada

MVC ViewBag için current implementation olan

silinecektir görüntülenen ise:

public dynamic ViewBag 
{ 
    get 
    { 
     if (_dynamicViewDataDictionary == null) 
     { 
      _dynamicViewDataDictionary = new DynamicViewDataDictionary(() => ViewData); 
     } 
     return _dynamicViewDataDictionary; 
    } 
} 

Ve Yani onu görebileceğiniz gibi bu DynamicViewDataDictionary

// Implementing this function improves the debugging experience as it provides the debugger with the list of all 
// the properties currently defined on the object 
public override IEnumerable<string> GetDynamicMemberNames() 
{ 
    return ViewData.Keys; 
} 

public override bool TryGetMember(GetMemberBinder binder, out object result) 
{ 
    result = ViewData[binder.Name]; 
    // since ViewDataDictionary always returns a result even if the key does not exist, always return true 
    return true; 
} 

public override bool TrySetMember(SetMemberBinder binder, object value) 
{ 
    ViewData[binder.Name] = value; 
    // you can always set a key in the dictionary so return true 
    return true; 
} 

parçası ViewData nesnesinin

+0

nesnesine bağlıdır. SO size izin verir vermez, haklı olarak kazandığınız ✓ verilecektir. –

+0

Yardım ettiğine sevindim :) –