.net mvc3 从一个action重定向到另外一个action时 弹出提示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net mvc3 从一个action重定向到另外一个action时 弹出提示相关的知识,希望对你有一定的参考价值。
我使用Response.Write("<script>alert(11)</script>")完全没有反应,想使用ViewData["someValue"]传一个动态数据过去,也行不通,应该怎么做了?
我的建议是使用使用重定向到另一个action:Redirect("/Main/LoginPage");,然后在另一个action页面加载完毕后alert();不就行了吗。例如
<script type="text/javascript">
$(function()
alert("11");
);
</script>
如果想传递数据:Redirect("/Main/LoginPage?key="+ViewData["someValue"].ToString());然后在LoginPagin这个action里面取key的值,不久得到了吗!已经很详细了。
望采纳。追问
这种方法确实可以 但是我现在只是要加一个弹出提示,如果因为这个去该跳转方式,怕改动就有点大了 ,还有其它的方法吗?
追答这种跳转一般情况下是加一个中间单独的跳转页,在跳转页里面弹出提示,你看现在很多大型的网站登陆都是这种方式。我记得在webform里面有向客户端输出脚本的方法:
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "msg" + Guid.NewGuid().ToString(), "alert('弹出信息');this.location='/Main/LoginPage';", false);
我没测试,你试试。MVC里面我不知道行不行。
这种方法在asp.net中倒是可以,但是在mvc3中不行,查了下资料貌似不支持
参考技术A public ActionResult A()return RedirectToAction("B");
public ActionResult B()
return Content("<script>alert(11)</script>");
追问
B也有自己的业务 怎么可能值弹出一个提示 而且还不好判断是哪个重定向到B的所以这种方法基本不行
追答.net mvc3 从一个action重定向到另外一个action时 弹出提示
这是你的问题
我的回答已经满足了
return Content("<script>alert(11);location.href='/Home/Index';</script>");
如何在 ASP.NET MVC 中重定向到动态登录 URL
【中文标题】如何在 ASP.NET MVC 中重定向到动态登录 URL【英文标题】:How to redirect to a dynamic login URL in ASP.NET MVC 【发布时间】:2010-09-26 07:10:16 【问题描述】:我正在创建一个为客户托管页面的多租户网站。 URL 的第一段将是一个标识客户端的字符串,在 Global.asax 中使用以下 URL 路由方案定义:
"client/controller/action/id"
这很好用,使用 /foo/Home/Index 等 URL。
但是,当使用 [Authorize] 属性时,我想重定向到也使用相同映射方案的登录页面。因此,如果客户端是 foo,登录页面将是 /foo/Account/Login 而不是 web.config 中定义的固定 /Account/Login 重定向。
MVC 使用 HttpUnauthorizedResult 返回 401 未授权状态,我认为这会导致 ASP.NET 重定向到 web.config 中定义的页面。
那么有人知道如何覆盖 ASP.NET 登录重定向行为吗?还是通过创建自定义授权属性在 MVC 中重定向更好?
编辑 - 回答: 在深入研究 .Net 源代码后,我认为自定义身份验证属性是最佳解决方案:
public class ClientAuthorizeAttribute: AuthorizeAttribute
public override void OnAuthorization( AuthorizationContext filterContext )
base.OnAuthorization( filterContext );
if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult )
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
"client", filterContext.RouteData.Values[ "client" ] ,
"controller", "Account" ,
"action", "Login" ,
"ReturnUrl", filterContext.HttpContext.Request.RawUrl
);
【问题讨论】:
对路由做几乎完全相同的事情,所以我需要这个!谢谢! 谢谢,我正试图弄清楚如何做类似的事情。 它给了我自己实现的想法,非常感谢! 如果使用 MVC 2 及更高版本,请务必设置 area=null(或设置为正确的区域) - 否则它将从您尝试访问的页面继承 没有 MVC 有什么方法可以做到这一点? 【参考方案1】:在 RTM 版本的 ASP.NET MVC 中,缺少 Cancel 属性。此代码适用于 ASP.NET MVC RTM:
using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Resources;
namespace ePegasus.Web.ActionFilters
public class CustomAuthorize : AuthorizeAttribute
public override void OnAuthorization(AuthorizationContext filterContext)
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
filterContext.Result = new RedirectToRouteResult(
new System.Web.Routing.RouteValueDictionary
"langCode", filterContext.RouteData.Values[ "langCode" ] ,
"controller", "Account" ,
"action", "Login" ,
"ReturnUrl", filterContext.HttpContext.Request.RawUrl
);
编辑:您可能希望禁用 web.config 中的默认表单身份验证 loginUrl - 以防有人忘记您有自定义属性并错误地使用了内置的 [Authorize] 属性。
修改web.config中的值:
<forms loginUrl="~/Account/ERROR" timeout="2880" />
然后创建一个操作方法 'ERROR' 记录错误并将用户重定向到您拥有的最通用的登录页面。
【讨论】:
如果使用 MVC 2 及更高版本,请务必将 area, null 添加到字典(或任何您的区域) - 否则它将从您尝试访问的页面继承 【参考方案2】:我认为主要问题是,如果您要搭载内置的 ASP.NET FormsAuthentication 类(并且没有充分的理由不应该),那么一天结束时就会调用FormsAuthentication.RedirectToLoginPage()
将查看一个配置的 URL。永远只有一个登录 URL,这就是他们设计的方式。
我对这个问题(可能是 Rube Goldberg 实现)的尝试是让它重定向到所有客户端共享的根目录中的单个登录页面,例如 /account/login。这个登录页面实际上不会显示任何内容;它检查 ReturnUrl 参数或我在会话中获得的某个值或标识客户端的 cookie,并使用它来发出立即 302 重定向到特定的 /client/account/login 页面。这是一个额外的重定向,但可能不会引人注意,它允许您使用内置的重定向机制。
另一种选择是根据您的描述创建您自己的自定义属性,并避免在FormsAuthentication
类上调用RedirectToLoginPage()
方法的任何内容,因为您将用自己的重定向逻辑替换它。 (您可以创建自己的类似类。)由于它是一个静态类,我不知道有任何机制可以注入您自己的替代接口并让它与现有的 [Authorize] 属性一起神奇地工作,它打击,但people have done similar things before。
希望有帮助!
【讨论】:
这可能是最安全的方法。创建自己的 [MyAuthorize] 属性是危险的。除非您的构建验证人们不使用内置的 [Authorize] 属性,否则您可能会冒着人们(或您自己)忘记和使用错误的风险 在某些情况下,覆盖Application_AuthenticateRequest
可能会有所帮助(请参阅下面的答案)。【参考方案3】:
我对这个问题的解决方案是自定义ActionResult
类:
sealed public class RequiresLoginResult : ActionResult
override public void ExecuteResult (ControllerContext context)
var response = context.HttpContext.Response;
var url = FormsAuthentication.LoginUrl;
if (!string.IsNullOrWhiteSpace (url))
url += "?returnUrl=" + HttpUtility.UrlEncode (ReturnUrl);
response.Clear ();
response.StatusCode = 302;
response.RedirectLocation = url;
public RequiresLoginResult (string returnUrl = null)
ReturnUrl = returnUrl;
string ReturnUrl get; set;
【讨论】:
【参考方案4】:不过,如果决定使用内置的 ASP.NET FormsAuthentication,则可以在 Global.asax.cs
中覆盖 Application_AuthenticateRequest
,如下所示:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
string url = Request.RawUrl;
if (url.Contains(("Account/Login"))
return;
if (Context.User == null)
// Your custom tenant-aware logic
if (url.StartsWith("/foo"))
// Your custom login page.
Response.Redirect("/foo/Account/Login");
Response.End();
return;
【讨论】:
以上是关于.net mvc3 从一个action重定向到另外一个action时 弹出提示的主要内容,如果未能解决你的问题,请参考以下文章
当用户在 asp.net mvc3 中未授权时重定向到另一个页面
当用户在 asp.net mvc3 中未授权时重定向到另一个页面