2016-08-09 3 views
0

У меня есть метод, называемый GetPrivlidge(), что я буду использовать его в каждом контроллере, этот метод используется для того, что будет вошедшего пользователь увидит и что не будет видеть это методМогу ли я отправить ViewBag из контроллера в контроллер пылесоса в MVC?

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

Я использую ViewBag.Pri для проверить в макете для привилегий, я должен отправить это ViewBag в каждом действии, так что я решил сделать контроллер, который имеет все общие методы это мой контроллер

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 
} 

и _layOut Я беру это ViewBag и сделать бросок на в и ем гк с привилегиями, как этот

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

и в действии я сделать объект Controller и вызвать метод GetPrivlidge() как этот

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

но layout не видят сообщение о ViewBag.Pri и ошибки сказать, что

Ссылка на объект не установлена ​​в экземпляр объекта.

этот контроллер не может видеть ViewBag, если да, то что я должен делать, чтобы справиться с этой ViewBag?

ответ

1

Каждый контроллер имеет свой собственный ViewBag. Лучше наследовать форму вашего контроллера AllRequiredDataController и использовать этот путь

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

спасибо большое, что вы спасли мое время;) :) –

Смежные вопросы