Перенос данных в ApplicationController - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь сделать модуль входа в систему с просмотра главной страницы.При первом доступе пользователя к домашней странице с помощью формы входа в систему, когда пользователь нажимает кнопку «Войти», страница должна сначала перенаправить на UserLoginController, а затем перенаправить на другой PanelController, который содержит все страницы с одной и той же главной страницей.Я хочу показать разные меню с разрешения другого пользователя.Когда я ссылаюсь на статью http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-cs, я создаю абстрактный класс ApplicationController, PanelController наследует его.В конструкторе я хочу получить информацию о пользователе входа в систему, чтобы идентифицировать разрешение пользователя, но кажется, что Запрос и Сессия недоступны.Пожалуйста, см. Код.

Сначала войдите 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();
    }

}

1 Ответ

0 голосов
/ 20 октября 2011

ViewData используется в MVC для передачи данных из Controllor в View

, а Tempdata используется для передачи данных из одного контроллера в другой

См. Передача состояния между методами действий

См. Этот пример для «Шаг за шагом» -

...