给定 HttpContext.Handler,如何在 MVC3 中启动时注册脚本
本文关键字:启动 注册 脚本 MVC3 Handler HttpContext 给定 | 更新日期: 2023-09-27 18:24:19
我有一个页面打开了一个带有外部URL(Twitter身份验证URL(的新窗口,现在该窗口将对用户进行身份验证并回调到操作方法,在该操作方法中,我必须关闭当前窗口(弹出窗口(并通知打开器身份验证成功,
在 Web 表单中,我曾经在 (回发(上做过这样的事情:
(HttpContext.Current.Handler as System.Web.UI.Page).ClientScript.RegisterStartupScript(
this.GetType(),
"winPop",
"window.opener.doSomething(true);window.close()",
true);
在 MVC 中,我尝试了这个但没有工作,因为没有电流,但有:
HttpContext.CurrentHandler
可以投射到Mvc.MvcHandler
现在出现了我知道MVC完全不同,但是有没有办法注册将在响应启动时运行的脚本?
我知道我可以制作一个额外的视图并在新窗口中打开它,然后重定向到 Twitter Url,然后在回调到同一窗口时,我会简单地调用脚本 window.opener......等等,但这意味着我必须制作一个额外的视图,在启动时只有一行 JavaScript,所以我想知道我是否可以执行以下操作之一:
选项 1:注册启动脚本,就像我上面解释的那样。选项 2:返回在客户端运行的 JavaScript 代码(无实际视图(。
说明
这在 MVC 中不存在,但您可以使用ViewModel
或ViewBag
。
样本
_Layout.cshtml
....
<head>
<title>@ViewBag.Title</title>
@if (ViewBag.StartScript != null)
{
<script>
@Html.Raw(ViewBag.StartScript);
</script>
}
....
您的操作方法
public ActionResult Index()
{
ViewBag.StartScript = "alert('Hello World')";
return View();
}
你可以简单地忘记你在做什么经典的WebForms,因为它对 ASP.NET MVC没有多大帮助。
在MVC ASP.NET,您有模型,控制器和视图(顾名思义(。因此,如果您想在视图中调用 javascript 函数并从您的模型中向其传递一些值,您可以执行以下操作:
@model MyViewModel
<script type="text/javascript">
alert(@Html.Raw(Json.Encode(Model.SomeValue)));
</script>
显然,您的控制器操作将填充此模型并将其传递给视图:
public ActionResult Foo()
{
var model = new MyViewModel
{
SomeValue = "Hello world"
};
return View(model);
}
当然还有相应的模型:
public class MyViewModel
{
public string SomeValue { get; set; }
}
看?模型、视图、控制器。
更新:
在该操作方法中,我必须关闭当前窗口(弹出窗口(并 通知开瓶器身份验证成功,
在这个简单的情况下,您不需要模型:
public ActionResult CallbackAction()
{
return View();
}
和内部CallbackAction.cshtml
:
<script type="text/javascript">
window.opener.doSomething(true);
window.close();
</script>