向web应用程序添加querystring参数后,方法失败



使用函数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);
    }

这工作完美。然后我在该页上实现了一个Querystring。正确地传递了Request参数,并且按照我期望的方式在Pageload上打开了超链接。BUT:下次调用此方法时,将打开的超链接是属于Querystring参数中指定的记录的超链接。我在里面放了一个标签来检查是否正确的参数's'被传递给ClientScript.RegisterStartupScript(),它是!!

如果页面已经加载了一个Querystring参数(eg.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 = "";
            }
    }

有什么提示吗?马丁

OK。发现错误:

将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 = "";
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新