我写了这么一个方法:
/// <summary>
/// 弹出选择页面,选取值并返回赋值
/// </summary>
/// <param name="page"></param>
/// <param name="url">要打开的页面地址</param>
/// <param name="componentsID">String[]类型,存储需要赋值的控件名称列表</param>
/// <param name="registerName">注册Script名称</param>
private void SetValueFromSelectList(Page page,String url,String[] componentsID,String registerName)
    {
        char sign='"';
        StringBuilder StrScript = new StringBuilder();
        StrScript.Append("<script language=javascript>");
        StrScript.Append("var vReturnValue=window.showModelessDialog('" + url + "');");
        //StrScript.Append("for(int i=0;i<vReturnValue.length;i++)");
        StrScript.Append("if (vReturnValue!=null)");
        StrScript.Append("{");
        for(int i=0;i<componentsID.Length;i++)
        {
            StrScript.Append("document.getElementById("+sign+componentsID[i]+sign+").value=vReturnValue["+i.ToString()+"];");
        }        
        StrScript.Append("}");
        StrScript.Append("</script>");        if (!page.IsClientScriptBlockRegistered(registerName))
        {
            page.RegisterClientScriptBlock(registerName, StrScript.ToString());
        }
    }现在发现两个问题:
1、弹出页面后,总是提示document.getElementById(...)对象为空
2、刷新页面后,这个弹出窗口自动弹出我在select.aspx页面中定义了这样一个方法    /// <summary>
    /// 设定返回值,并关闭页面
    /// </summary>
    /// <param name="page"></param>
    /// <param name="rtnValue">String[]类型,返回值列表</param>
    /// <param name="registerName">注册Script名称</param>    private void SetRtnValue(Page page,String[] rtnValue, String registerName)
    {       
        StringBuilder StrScript = new StringBuilder();
        StrScript.Append("<script language=javascript>");
        StrScript.Append("var aInfo  = new Array("+rtnValue.Length+");");
        StrScript.Append("if (aInfo!=null)");
        StrScript.Append("{");
        for (int i = 0; i < rtnValue.Length; i++)
        {
            StrScript.Append("aInfo["+i.ToString()+"]="+rtnValue[i]+";");
        }        StrScript.Append("}");
        StrScript.Append("window.returnValue =aInfo ;");
        StrScript.Append("window.close();");
        StrScript.Append("</script>");        if (!page.IsClientScriptBlockRegistered(registerName))
        {
            page.RegisterClientScriptBlock(registerName, StrScript.ToString());
        }
    }这个页面出现了这个问题:
1、页面关闭不掉,并且还又弹出了一个页面请大侠指点,怎么解决我的问题?

解决方案 »

  1.   

    1、页面关闭不掉,并且还又弹出了一个页面
    页面上没加
     <title>webpage</title>
        <base target="_self">
        </base>
      

  2.   

    脚本最好写在ASPX页面上,不要写在后台的CS文件中,你的代码完全可以用前台脚本来实现的。
      

  3.   

    to humin1906(HJM):谢谢,这个问题解决了还有两个问题呢?
      

  4.   

    document.getElementById(...)得不到对象 ,换中方法写写
    刷新页面等于又执行拉一下刚才的操作,所以又弹出来拉
      

  5.   

    1、使用 RegisterStartupScript
    2、操作完毕后需要刷新页面 window.location.href = window.location.href