0

我有以下代码,它使用函数 ClientScript.RegisterStartupScript 在与后面的代码不同的框架中打开超链接。超链接事先从数据库中检索并分配给标签。

    public void OpenWindow()
    {
        Formview_CurrentSelectedProcess.DataBind();

        string url = (Formview_CurrentSelectedProcess.FindControl("LabelLink") as Label).Text;
        string s = "window.open('" + url + "', 'main');";
        Test.Text = s;
        ClientScript.RegisterStartupScript(this.GetType(), "script", s, true);
    }

这很完美。然后我在那个页面上实现了一个查询字符串。请求参数正确传递,超链接以我预期的方式在 Pageload 上打开。但是:下次调用此方法时,将打开的超链接是属于 Querystring 参数中指定的记录的超链接。我在里面放了一个标签来检查是否将正确的参数's'传递给 ClientScript.RegisterStartupScript() 并且它是!!!

如果页面加载了查询字符串参数(例如.aspx?ID=324),则该函数会发生错误。加载没有该参数的同一页面可以完美运行。

怎么了?为什么 ClientScript.RegisterStartupScript 返回旧结果,尽管它的输入参数已更改?

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
            PopulateRootLevel();
            string GetID = Request.QueryString["ID"];
            if (String.IsNullOrEmpty(GetID))
            {
            }
            else
            {
                InputNodeToOpen.Text = GetID;
                ButtonClick_transmit(button1, EventArgs.Empty);
                InputNodeToOpen.Text ="";
                IDNodesToBeOpened.Text = "";

            }

    }

有什么提示吗?马丁

4

1 回答 1

0

好的。发现错误:

将 page_load 方法中的所有操作放在单独的括号内后,它就可以工作了。我以为他们已经被分配到没有回传的情况;但他们不是。需要括号。所以它必须是:

protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        PopulateRootLevel();
        string GetStructure = Request.QueryString["Structure"];
        if (String.IsNullOrEmpty(GetStructure))
        {
        }
        else
        {
            InputNodeToOpen.Text = GetStructure;
            ButtonClick_transmit(button1, EventArgs.Empty);
            InputNodeToOpen.Text = "";
            IDNodesToBeOpened.Text = "";

        }
    }
}
于 2015-09-13T13:41:44.093 回答