2016-08-09 60 views
0

Ich habe eine Methode GetPrivlidge() genannt, dass ich es in jedem Controller verwenden, ist diese Methode für verwendet wird, was wird der aktuelle Benutzer angemeldet werden sehen, und was nicht sehen dies die MethodeKann ich ViewBag vom Controller zum Controller in MVC senden?

public void GetPrivlidge() 
{ 
     string name = System.Web.HttpContext.Current.User.Identity.Name; 
     name = EncriptionAndDecription.Encrypt(name); 
     int UserId = (from c in db.users where c.Arabicusername == name select c.Usersid).SingleOrDefault(); 
     SamahyatOfUser S = (from SS in db.SamahyatOfUsers where SS.User_Id == UserId select SS).SingleOrDefault(); 
     ViewBag.Pri = S; 
     string RoleName = (from R in db.Roles where R.User_ID == UserId && R.UserName == name select R.RoleName).SingleOrDefault(); 
     if (RoleName.Equals(EncriptionAndDecription.Encrypt("Admin"))) 
     { 
      ViewBag.ADMIN = true; 
     } 
     else 
     { 
      ViewBag.ADMIN = false; 
     } 
} 

I ViewBag.Pri verwenden ist Check-in-Layout für Privileg, ich muss diese ViewBag in jeder Aktion senden, so habe ich beschlossen, Controller zu machen, die alle gängigen Methoden haben dies ist mein Controller

public class AllRequiredDataController : Controller 
{ 
    // 
    // GET: /AllRequiredData/ 
    mts_exchangeEntities db = new mts_exchangeEntities(); 
    //this Method is used in privlidge that make user do thing and dont make anthor thing (Do or not Do) 
    #region privlidge_Data 
    public void GetPrivlidge() 
    { 
     string name = System.Web.HttpContext.Current.User.Identity.Name; 
     name = EncriptionAndDecription.Encrypt(name); 
     int UserId = (from c in db.users where c.Arabicusername == name select c.Usersid).SingleOrDefault(); 
     SamahyatOfUser S = (from SS in db.SamahyatOfUsers where SS.User_Id == UserId select SS).SingleOrDefault(); 
     ViewBag.Pri = S; 
     string RoleName = (from R in db.Roles where R.User_ID == UserId && R.UserName == name select R.RoleName).SingleOrDefault(); 
     if (RoleName.Equals(EncriptionAndDecription.Encrypt("Admin"))) 
     { 
      ViewBag.ADMIN = true; 
     } 
     else 
     { 
      ViewBag.ADMIN = false; 
     } 
    } 
    #endregion 
} 

und in _layOut nehme ich diese ViewBag und Guss machen für in und WO rk mit Privileg als diese

FinalMts.Models.SamahyatOfUser S = (FinalMts.Models.SamahyatOfUser)ViewBag.Pri; 

und in Aktion, die ich mache Objekt-Controller und rufen Sie die Methode GetPrivlidge() als diese

AllRequiredDataController Required = new AllRequiredDataController(); 
    public ActionResult AddCurrencyPrices() 
    { 
     //get privlidg Data 
     Required.GetPrivlidge(); 
     return View(); 
    } 

aber die layout Sie die ViewBag.Pri und Fehlermeldung nicht sehen, sagen, dass

Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

ist dieser Controller nicht ViewBag wenn ja, was soll ich mit diesem ViewBag beschäftigen tun sehen kann?

Antwort

1

Jeder Controller hat seinen eigenen ViewBag. Besser ist der Controller Form AllRequiredDataController und verwenden diese Weise

class Controller1 : AllRequiredDataController 
{ 
    public ActionResult AddCurrencyPrices() 
    { 
     //get privlidg Data 
     GetPrivlidge(); 
     return View(); 
    } 
} 
+0

vielen Dank Mann erben Sie meine Zeit gespeichert;) :) –