C # и Javascript - PullRequest
       11

C # и Javascript

1 голос
/ 10 апреля 2011
<script type="text/javascript">

    function reload() { window.parent.location.href = "loginPage.aspx"; }

</script>

У меня есть вышеупомянутый JavaScript, как вызвать это с моим кодом позади?

private void checkpageacess()
{
    if ((lpsContext)Session["sessionfContext"] == null)
    {
        //-------------------I want to call that java script here
        Response.Redirect(@"~\Logout.aspx");
    }
    else
    {
        ErrorManager.Current.LpsContext = (lpsContext)Session["sessionfContext"];
    }
}

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

Вы не можете напрямую вызывать код JavaScript из кода C #. Последний выполняется на сервере в ответ на запрос, а первый выполняется на клиенте после того, как сервер завершил обработку и доставил ответ.

Что вы можете сделать, как показал @Darin Dimitrov в своем примере, - это определить, когда в коде C # доставлять эту функцию JavaScript клиенту, и указать, когда ее выполнять. Обычно это происходит, когда страница отображается, возможно, с небольшой задержкой, в ответ на какое-либо событие страницы (например, нажатие кнопки).

Естественно, это означает, что это должно происходить посредством обратной передачи при ответе на событие страницы, что может не соответствовать потребностям пользователя. Можете ли вы подробнее рассказать, когда нужно вызывать этот метод? Имейте в виду, что взаимодействие со страницей и взаимодействие с сервером - это две разные вещи. Весь код C # выполняется до того, как код JavaScript станет доступен. Скорее всего, , что вы хотите сделать в ответ на событие страницы и должны быть выполнены полностью на JavaScript на стороне клиента, а не из C #.

0 голосов
/ 10 апреля 2011

Вы не можете сделать это с вашей текущей логикой, так как любой код JavaScript, который вы отправляете в браузер, исчезнет без эффекта при вызове команды Response.Redirect.

Одним из способов является то, что клиентская функция reload выполняет оба действия: загружает другую страницу в родительское окно и перенаправляет текущее окно.

Код для reload будет выглядеть так:

function reload() {
   window.parent.location.href = "loginPage.aspx";
   document.location.href = "/Logout.aspx";
}

И ваш код позади:

if ((lpsContext)Session["sessionfContext"] == null)
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "auto_reload", "reload();", true);
}

(Да, именно то, что дал Дарин, именно в правильном контексте:))

Вы можете также рассмотреть возможность заставить checkpageacess возвращать логическое значение, чтобы при значении false прервать любые дальнейшие действия.

0 голосов
/ 10 апреля 2011

Вы можете использовать метод RegisterStartupScript :

public void Button1_Click(Object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(
        GetType(), 
        "myscript", 
        "reload();", 
        true
    );
}

Это вызовет функцию JavaScript reload, как только страница будет отображена на клиенте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...