c# 4.0 - C# and Javascript

c# 4.0 - C# and Javascript

本文关键字:and Javascript      更新时间:2023-09-26
<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"];
    }
}

你不能直接从c#代码调用JavaScript代码。后者在服务器上运行以响应请求,而前者在服务器完成处理并交付响应后在客户端运行。

你能做的,正如@Darin Dimitrov在他的例子中所展示的,是确定在c#代码中何时将JavaScript函数交付给客户端,并设置它何时执行。这通常发生在页面呈现时,可能会有很短的延迟,以响应某种页面事件(如按钮单击)。

当然,这意味着在响应页面事件时必须通过回发来实现,这可能不是您想要的用户体验。你能详细说明什么时候需要调用这个方法吗?请记住,与页面交互和与服务器交互是完全不同的两件事。所有的c#代码在JavaScript代码可用之前就已经完成了执行。这是高度很可能你想做的是响应一个页面事件,应该完全在客户端JavaScript中完成,而不是从c#。

您可以使用RegisterStartupScript方法:

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

这将在客户端渲染页面时调用reload javascript函数。

你不能用你当前的逻辑,因为任何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);
}

(是的,就是Darin给出的,只是在正确的上下文中:))

您也可以考虑使checkpageacess返回布尔值,当为false时,中止任何进一步的操作。