【问题标题】:Redirecting to mobile page in Asp.Net MVC 3在 Asp.Net MVC 3 中重定向到移动页面
【发布时间】:2011-08-18 20:03:18
【问题描述】:

我正在尝试为经过修改以适应移动设备(主要是 iPhone/Android)的 Asp.Net MVC 应用程序使用不同的登录页面。我基本上只需要修改登录视图,因为实际内容在应用程序的特定部分,我并不是要制作整个网站的移动版本。

所以我试着关注这个:http://www.asp.net/learn/whitepapers/add-mobile-pages-to-your-aspnet-web-forms-mvc-application

但我不太了解身份验证,无法确切知道如何为移动版本执行登录操作方法。我觉得我可能缺少特定的移动发布操作,而且我不明白如何处理重定向中传递的 url。到目前为止,这是我所得到的:

public ActionResult LogOn()
        {
            string returnUrl = Request.QueryString["ReturnUrl"];
            if ((returnUrl != null) && returnUrl.StartsWith("/Mobile/",
                                       StringComparison.OrdinalIgnoreCase))
            {
                return RedirectToAction("LogOnMobile", "Account",
                                        new { ReturnUrl = returnUrl });
            }
            return View();
        }

        public ActionResult LogOnMobile(string returnurl)
        {
            return View();

        }



        [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                if (MembershipService.ValidateUser(model.UserName, model.Password))
                {
                    FormsService.SignIn(model.UserName, model.RememberMe);
                    if (Url.IsLocalUrl(returnUrl))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                }
                else
                {
                    ModelState.AddModelError("", "The user name or password provided is incorrect.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

这行不通。我进入了移动登录页面(或者实际上到目前为止,我刚刚尝试通过注释掉 if 子句来尝试操作方法),但是当我尝试登录时,我只是再次进入同一页面,但奇怪的是没有字段...

我需要做什么才能让它工作?

【问题讨论】:

    标签: asp.net asp.net-mvc-3 mobile redirecttoaction


    【解决方案1】:

    您是否将帐户控制器保留在移动区域中?更好的做法是使用移动区域来保留所有移动站点的内容并将授权重定向到 AccountController。

        public ActionResult Login()
        {
            string returnUrl = Request.QueryString["ReturnUrl"];
            if ((returnUrl != null) && returnUrl.StartsWith("/Mobile/", StringComparison.OrdinalIgnoreCase))
                return RedirectToAction("Login", "Account", new { Area = "Mobile", ReturnUrl = returnUrl });
    
            return ContextDependentView();
        }
    

    【讨论】:

      【解决方案2】:

      我没有看到您实际检查的任何地方是否是要重定向的移动设备:

      if (Request.Browser.IsMobileDevice){ }
      

      【讨论】:

      • 嗯,根据我提到的微软页面,“/Mobile/”的 url 字符串检查应该这样做......
      • 检查“/Mobile/”没问题,但移动浏览器不会自动将其添加到您的请求网址中。您必须先检查它是否是移动浏览器,然后将“Mobile”添加到 url。再次通读文档。 “Request.Browser.IsMobileDevice()”调用是您实际检查请求是否来自移动浏览器的地方。我确信它只是在检查 http 请求中的用户代理字符串。
      • 好的,谢谢,无论如何这可能会派上用场,但它仍然不是我实际问题的答案。就像我提到的那样,我已经注释掉了 if 测试,只是为了尝试这些方法,即使我得到了正确的 GET 方法,我也不知道如何从那里继续前进。它似乎卡在那里。
      猜你喜欢
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2011-06-22
      • 2018-12-13
      • 2023-04-09
      相关资源
      最近更新 更多