C# 从下拉列表asp.net中调用javascript方法

C# 从下拉列表asp.net中调用javascript方法,c#,javascript,asp.net,C#,Javascript,Asp.net,我有一个下拉列表,当选择的值是certin值时,我需要做一些事情,然后重定向到新选项卡中的新页面 现在我想最好的方法是像这样使用response.wirte()或response.wirte() Response.Write(); Response.Write(window.open('url')); Response.Write(); 或者Page.ClientScript.RegisterStartupScript()方法调用javascript方法,该方法将在不同的选项卡中打开新页面,如

我有一个下拉列表,当选择的值是certin值时,我需要做一些事情,然后重定向到新选项卡中的新页面

现在我想最好的方法是像这样使用response.wirte()或response.wirte()

Response.Write();
Response.Write(window.open('url'));
Response.Write();
或者Page.ClientScript.RegisterStartupScript()方法调用javascript方法,该方法将在不同的选项卡中打开新页面,如下所示

Page.ClientScript.RegisterStartupScript(GetType(),"GoToURL", "<script language=JavaScript>GoToURL(" + url + ")</script>");
Page.ClientScript.RegisterStartupScript(GetType(),“gotour”,“gotour”(+url+));
javascript看起来像

<script type="text/javascript">
                function GoToURL(url)
                {
                    window.open(url);
                }
            </script>

函数GoToURL(url)
{
窗口打开(url);
}
我已经尝试了这两种方法和response.write方法,但无法解析response请求,在使用Page.ClientScript.RegisterStartupScript时,什么都没有发生

有人能看到我在这件事上哪里出了问题,或者有没有其他可能的方法

请注意,这两种代码都存在于我的下拉列表的SelectedIndexChanged方法中

提前谢谢

更新 最后我屈服了,用一个按钮完成了代码隐藏和java脚本(爱上了onclientclick事件:p),因为从下拉菜单的onselected changed事件运行java脚本似乎没有任何效果

谢谢你的建议:)

编辑:

根据您的评论,我认为这是您寻求的解决方案。您可以为每个下拉列表值创建一个案例,并根据这些案例将用户重定向到新选项卡中的不同url

    protected void ddlAuthoritytype_SelectedIndexChanged(object sender, EventArgs e)
{
    var port = Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port.ToString();

    string ddl = ddlAuthoritytype.SelectedValue;
    switch (ddl)
    {
        case "AL":
            var script = string.Format("window.open('{0}://{1}{2}{3}')", Request.Url.Scheme, Request.Url.Host, port, ResolveUrl("~/alabama-state-tax-calculator.aspx"));
            ScriptManager.RegisterStartupScript(this, this.GetType(), "newWindow",script, true);
            break;
    }
}

您可以改为使用隐藏字段,在代码隐藏中,使用URL设置隐藏字段值

pageLoad()
javascript函数中检查隐藏字段的值,如果它不是空的,请使用
窗口。打开(hiddenFieldValue)
类似于:

<script type="text/javascript">
    function pageLoad()
    {
        // Use $('#' + '<%= hfURL.ClientID %>') if hidden field has runtat="server"
        if($('#' + '<%= hfURL.ClientID %>').val()) 
            window.open($('#' + '<%= hfURL.ClientID %>').val()); 
            // OR window.open($("hfURL").val(), '_blank');
    }
</script>

函数pageLoad()
{
//如果隐藏字段具有runtat=“server”,请使用$('#'+'')
if($('#'+'').val())
window.open($('#'+'').val();
//或window.open($(“hfURL”).val(),'u blank');
}

问题在于,在这两种情况下,当页面发回并返回html时,它们都没有找到JavaScript函数ie:gotour(),因为它最初没有加载。 您可以调用
window.open(url)方法。像这样:

Page.ClientScript.RegisterStartupScript(GetType(),"GoToURL", "<script language=JavaScript>window.open(" + url + ");</script>");
Page.ClientScript.RegisterStartupScript(GetType(),“gotour”,“window.open”(+url+);”);
我还没有试过,但我认为这应该有效


希望这会有所帮助

这会起作用,但我需要执行大量代码以及重定向,因此这意味着我不能将java调用放在html中(除非我错过了OnClient更改)这不会在一个新的选项卡中打开页面,这是我正在寻找的。这实际上是我尝试的第一件事,如果你看我的问题:),这只是没有做什么,我不知道为什么(这是我打开问题的原因之一),谢谢你的帮助,但我已经放弃了不使用按钮的想法,因为它变得越来越耗时,我还有许多其他项目需要在岸上完成。这看起来很有效,现在就去试试吧。出于某种原因,这只是一直在说找不到控件,即使我从clientID属性中获取控件的客户端名称,java脚本页面加载方法能否在加载控件(在母版页、内容标记和隐藏字段的情况下)之前触发?mybad:)很抱歉,我忘了在控件名称之前添加“#”。您是否使用asp.net HiddenField?如果是,请让我知道更新代码。是的,我使用的是asp.net隐藏字段,这是否与代码不同?我更新代码以访问服务器端隐藏字段控件
Page.ClientScript.RegisterStartupScript(GetType(),"GoToURL", "<script language=JavaScript>window.open(" + url + ");</script>");