日期:2014-05-18  浏览次数:20393 次

请教个关于showModalDialog的问题
C# code

String strScript = "<script>\r\n";
            strScript += "function OpenWin(){\r\n";
            strScript += "var str=window.showModalDialog('commonPage.aspx','','dialogWidth=410px;dialogHeight=400px')\r\n";
            strScript += "if(str!=null)  document.parentPage.txtValue.value=str \r\n ";
            strScript += "}\r\n";
            strScript += "</script>";
            CSM.RegisterStartupScript(this.GetType(), ScriptName, strScript);




1、

我用上面的代码实现一个网页 showModalDialog 

可以打开一个网页窗体,在网页窗体关闭的时候 可以在 主窗体上返回一个值

在主窗体上有一个gridview ,第一列为模板列,是textbox, 如何将返回的值批量写到 textbox里面?

2、在主窗体上有一个按钮,按钮下面有点击事件, 如何在关闭Modal窗体后,先返回值然后再触发按钮的点击事件?

两个问题,实现哪一种也可以




------解决方案--------------------
var s = document.getElementById("GridView1").getElementsByTagName("INPUT")
for(i=0;i<s.length;i++)
{
 s[i].value="xx"
}
循环一次即可。
------解决方案--------------------
如果str是多个值的组合,则自己根据情况分解
------解决方案--------------------
触发主窗体上的按钮事件:window.dialogArgument.__doPostBack('btnName',''),但弹出窗体时的应传递window,即:window.showModalDialog('commonPage.aspx',window,'dialogWidth=410px;dialogHeight=400px')

获得返回值的方法:假设主体窗上接收值的控件为txtInput,
window.dialogArguments.document.all('txtInput') = returnValue

以上脚本均写在弹出窗体页面,并在关闭弹出窗体前。
------解决方案--------------------
1,2 都写到showModalDialog 
如:
function OpenDialogAndDeal(){
var reValue=showModalDialog(....);
if(reValue==null)
{
return false;
}
var GridView=document.getElementById('GridView1');
for(int i=2;i<=GridView.length;i++)
{
var textBox=document.getElementById('TextBox控件在客户端的ID');//例如DataGrid_ctl2_ServerName(这是datagrid中的写法,gridview也相似,可以通过查看源文件找到html端id,其中的ctl2指的是第一行的控件,通过"DataGrid_ctl"+i+"ServerName"组合得到具体的那行控件,具体的写法通过查看源文件后就应该会明白的吧)
if(textBox!=null)
{
textBox.value=reValue;
}
}
document.getElementById('Button').click();
}