我写了这么一个方法:
/// <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、页面关闭不掉,并且还又弹出了一个页面请大侠指点,怎么解决我的问题?
/// <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、页面关闭不掉,并且还又弹出了一个页面请大侠指点,怎么解决我的问题?
页面上没加
<title>webpage</title>
<base target="_self">
</base>
刷新页面等于又执行拉一下刚才的操作,所以又弹出来拉
2、操作完毕后需要刷新页面 window.location.href = window.location.href