Учитывая HttpContext.Handler, как я могу зарегистрировать скрипт при запуске в MVC3 - PullRequest
1 голос
/ 14 февраля 2012

У меня есть страница, которая открывает новое окно с внешним URL-адресом (URL-адресом аутентификации Twitter), теперь это окно будет аутентифицировать пользователя и вызывать метод действия, в этом методе действия мне нужно закрыть текущее окно (popUp) и сообщить открывателю, что аутентификация прошла успешно,

в веб-формах, которые я использовал для (обратной передачи):

            (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, который выполняется на клиенте (без фактического просмотра).

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Описание

Это не существует в MVC, но вы можете использовать для этого ViewModel или ViewBag.

Sample

_Layout.cshtml

....
<head>
<title>@ViewBag.Title</title>
@if (ViewBag.StartScript != null)
{
    <script>
        @Html.Raw(ViewBag.StartScript);
    </script>
}
....

Ваш ActionMethod

public ActionResult Index()
{
    ViewBag.StartScript = "alert('Hello World')";
    return View();

}
1 голос
/ 14 февраля 2012

Вы можете просто забыть, что вы делали с классическими веб-формами, поскольку это не сильно поможет в ASP.NET MVC.

В ASP.NET MVC у вас есть Модели, Контроллеры и Представления (как следует из названия). Поэтому, если вы хотите вызвать функцию 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; }
}

См? Модель, Вид, Контроллер.


UPDATE:

в этом методе действия я должен закрыть текущее окно (popUp) и сообщить открывателю, что аутентификация прошла успешно,

Вам не нужна модель в этом простом случае:

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

и внутри CallbackAction.cshtml:

<script type="text/javascript">
    window.opener.doSomething(true);
    window.close();
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...