2011-10-20 57 views
0

我正在嘗試使用視圖母版頁執行登錄模塊。第一個用戶使用登錄表單訪問主頁,當用戶單擊登錄時,頁面應該首先重定向到UserLoginController,然後重定向到另一個PanelController,該頁面包含具有相同主頁面的所有頁面。我想通過不同用戶的許可顯示不同的菜單。當我參考文章http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-cs我創建了一個抽象類ApplicationController,PanelController繼承它。在構造函數中,我想獲取登錄用戶的信息來識別用戶的權限,但似乎Request和Session不可用。請參閱代碼。將數據傳輸到ApplicationController

首先登錄的Javascript

<script type="text/javascript" language="javascript"> 
    $(document).ready(function() { 
     $(btnLogin).click(function() { 
      var sso = $(txtSSO).val(); 
      var pwd = $(txtPwd).val(); 
      if (sso == "") 
      { alert("Please input your SSO number"); } 
      else if (pwd == "") 
      { alert("Please input your password"); } 
      else { 
       jQuery.ajax(
       { url: '<%:Url.Action("UserLogin", "UserLogin")%>', 
        data: { sso: sso, pwd: pwd }, 
        success: function (data) { 
         window.location = '<%: Url.Action("Demo","Panel") %>'; 
        } 
       } 
       ); 
      } 
     }); 
    }); 

</script> 

的UserLoginController

public ActionResult UserLogin() 
    { 
     string sso = ""; 
     string pwd = ""; 
     try 
     { 

      if (Request.IsAjaxRequest()) 
      { 
       sso = Request.Params["sso"].ToString(); 
       pwd = Request.Params["pwd"].ToString(); 
      } 

      Regex reg = new Regex("^[0-9]{9}$"); 
      if (!reg.Match(sso).Success || pwd == "") 
      { 
       ViewData["errorMsg"] = "Either your UserID or your Password is incorrect"; 
       return View("Index"); 
      } 
      SystemAdminEntities entity = new SystemAdminEntities(); 
      var result = entity.ValidateUserLogin(sso, pwd).FirstOrDefault(); 

      if (result == 1)//User is found 
      { 
       int isso = Convert.ToInt32(sso); 
       var dbEmp = (from e in entity.sys_employee 
          where e.sso == isso 
          select e); 
       SysEmployee emp = dbEmp.FirstOrDefault<SysEmployee>(); 
       LogonUserModel currentUser = LogonUserModel.GetUser(); 
       currentUser.CopyUserInfo(emp); 

       //FormsAuthenticationTicket ticket=new 
       FormsAuthentication.SetAuthCookie(currentUser.SSO.ToString(), true); 
       Session.Add("emp", currentUser); 
       this.Session.Add("sso", currentUser.SSO); 
       this.Session.Add("empid", currentUser.EmpID); 
       this.Session.Add("ename", currentUser.EName); 
       return RedirectToAction("Demo", "Panel");//重定向到 Demo 
      } 
      else if (result == 0)//User is not found 
      { 
       ViewData["errorMsg"] = "User isn't found"; 
       return View("Index"); 
      } 
      else if (result == 2)//Password not correct 
      { 
       ViewData["errorMsg"] = "Password Error"; 
       return View("Index"); 
      } 
      return View("Index"); 
     } 
     catch { return View("Index"); } 
    } 

的ApplicationController中

public abstract class ApplicationController : Controller 
{ 
    private SystemAdminEntities _entities = new SystemAdminEntities(); 

    public ApplicationController() 
    { 
     //根據人員判斷權限 
     int sso = 0;//= Request.Form["sso"].ToString(); 
     try 
     { 
      sso = int.Parse(Session["sso"].ToString()); 
      var e = (from emp in _entities.sys_employee//得到對應的用戶 
        where emp.sso == sso 
        select emp 
       ); 
      SysEmployee loginUser = e.FirstOrDefault<SysEmployee>(); 
      ViewData["modules"] = loginUser.SysHasPerm; 
     } 
     catch 
     { 
      ViewData["modules"] = null; 

     } 

    } 

的PanelController

public class PanelController : ApplicationController 
{ 

    // 
    // GET: /Panel/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Demo() 
    { 
     return View(); 
    } 

} 

回答