window.showModalDialog 不return false 不执行咋回事

Nathing0212 2006-11-21 05:31:37
我想在window.showModalDialog后postback 父窗口,但是就是不弹出showModalDialog对话框,而return false 后可以.有知道的么?
...全文
482 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nathing0212 2006-11-22
  • 打赏
  • 举报
回复
我描述的可能不是很清楚,参照别人的帖子,加了一个自定义的postback

string ls_script4 = "";
ls_script4 += " function doPostBack() {";
ls_script4 += " var theForm = document.forms['aspnetForm']; ";
ls_script4 += " theForm.submit();";
ls_script4 += " }";

勉强实现了.谢谢大家了,尤其是tianzhenjing(宁静夏天),结了昂.
test33 2006-11-22
  • 打赏
  • 举报
回复
mark`
windykuang 2006-11-21
  • 打赏
  • 举报
回复
遇到过,不记得了,顶一把~~~~
Nathing0212 2006-11-21
  • 打赏
  • 举报
回复
我测试了一下,改成全局变量命名还是不弹出showModelessDialog来啊.用alert取全局变量名每次都是加2.
cpp2017 2006-11-21
  • 打赏
  • 举报
回复
关键是要把同步变成异步,但是button提交后.页面客户端的javascript全部会unload.所以我们可以找另外一个窗口实现.
另外一个窗口必须与该窗口有关系.

假设,你当前的窗口是在一个窗口的iframe中.可以这样写.

<SCRIPT language="javascript">
<!--
function ButtonOnclick()
{
window.parent.ShowWindow();
}
//-->
</SCRIPT>


然后在父窗口中.

<SCRIPT language="javascript">
<!--
function ShowWindow()
{
setTimeout(ShowWindow2,50); //同步变成异步,50毫秒后,开始弹出对话框,而此时,他的子页面已经postback,执行server的click事件
}

function ShowWindow2()
{
window.showModalDialog("aa.html");
}
//-->
</SCRIPT>
tianzhenjing 2006-11-21
  • 打赏
  • 举报
回复
找到了,你注册脚本时候名称重复了

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", ls_script5, true);
空格的地方是脚本名称,你Page_Load和Button51点击的时候都注册了名称为""的脚本,所以不对,你可以设一个int全局变量,每次+1,转成字符名称,就可以了
孟子E章 2006-11-21
  • 打赏
  • 举报
回复
Postback也是没有问题的。
////处理事件的其他代码
Response.Write("<script>window.top.returnvalue=false;window.top.close()</script>")
仍然是可以的,都用过N次了

Nathing0212 2006-11-21
  • 打赏
  • 举报
回复
发了,谢谢
tianzhenjing 2006-11-21
  • 打赏
  • 举报
回复
把.aspx和.cs两个文件打包发过来
tianzhenjing@126.com
haodouzhe123x 2006-11-21
  • 打赏
  • 举报
回复
window.showModalDialog的用法如下:你自己看看吧!!~~
一、showModalDialog和showModelessDialog有什么不同?
  showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。
  showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P)

二、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口?
  在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<html>和<body>之间的。

三、怎样才刷新showModalDialog和showModelessDialog里的内容?
  在showModalDialog和showModelessDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠javascript了,以下是相关代码:

<body onkeydown="if (event.keyCode==116){reload.click()}">
<a id="reload" href="filename.htm" style="display:none">reload...</a>

  将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要配合<base target="_self">使用,不然你按下F5会弹出新窗口的。

四、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。
  <input type="button" value="关闭" onclick="window.close()">
  也要配合<base target="_self">,不然会打开一个新的IE窗口,然后再关掉的。

五、showModalDialog和showModelessDialog数据传递技巧。
  (作者语:本来想用一问一答形式来写的,但是我想不出这个怎么问,所以只好这样了。)
  这个东西比较麻烦,我改了好几次了不是没办法说明白(语文水平越来越差了),只好用个例子说明了。
  例子:
    现在需要在一个showModalDialog(或showModelessDialog)里读取或设置一个变量var_name

      一般的传递方式:
        window.showModalDialog("filename.htm",var_name)
        //传递var_name变量
      在showModalDialog(或showModelessDialog)读取和设置时:
        alert(window.dialogArguments)//读取var_name变量
        window.dialogArguments="oyiboy"//设置var_name变量
    这种方式是可以满足的,但是当你想在操作var_name同时再操作第二个变理var_id时呢?就无法再进行操作了。这就是这种传递方式的局限性。
    
      以下是我建议使用的传递方式:
        window.showModalDialog("filename.htm",window)
        //不管要操作什么变量,只直传递主窗口的window对象
      在showModalDialog(或showModelessDialog)读取和设置时:
        alert(window.dialogArguments.var_name)//读取var_name变量
        window.dialogArguments.var_name="oyiboy"//设置var_name变量

        同时我也可以操作var_id变量
        alert(window.dialogArguments.var_id)//读取var_id变量
        window.dialogArguments.var_id="001"//设置var_id变量

        同样还可以对主窗口的任何对象进行操作,如form对象里的元素。
        window.dialogArguments.form1.index1.value="这是在设置index1元素的值"

六、多个showModelessDialog的相互操作。
  因为光说很费劲,我就偷点懒,直接用代码来说了,如果不明白的话那就直接来信(oyiboy#163.net(使用时请将#改成@))问我吧。

  以下代码的主要作用是在一个showModelessDialog里移动别一个showModelessDialog的位置。

  主文件的部份js代码。
  var s1=showModelessDialog(''控制.htm'',window,"dialogTop:1px;dialogLeft:1px") //打开控制窗口
  var s2=showModelessDialog(''about:blank'',window,"dialogTop:200px;dialogLeft:300px")  //打开被控制窗口

  控制.htm的部份代码。
  <script>
    //操作位置数据,因为窗口的位置数据是"xxxpx"方式的,所以需要这样的一个特殊操作函数。
function countNumber(A_strNumber,A_strWhatdo)
{
A_strNumber=A_strNumber.replace(''px'','''')
A_strNumber-=0
switch(A_strWhatdo)
{
case "-":A_strNumber-=10;break;
case "+":A_strNumber+=10;break;
}
return A_strNumber + "px"
}
  </script>
  <input type="button" onclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,''-'')" value="上移">
  <input type="button" onclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,''-'')" value="左移">
  <input type="button" onclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,''+'')" value="右移">
  <input type="button" onclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,''+'')" value="下移">

  以上关键部份是:
    窗口命名方式:var s1=showModelessDialog(''控制.htm'',window,"dialogTop:1px;dialogLeft:1px")
    变量访问方式:window.dialogArguments.s2.dialogTop

  这个例子只是现实showModelessDialog与showModelessDialog之间的位置操作功能,通过这个原理,在showModelessDialog之间相互控制各自的显示页面,传递变量和数据等。这要看各位的发挥了。
Nathing0212 2006-11-21
  • 打赏
  • 举报
回复
总是postback就行啊,可是我写的代码里,拿掉return false 时,窗口就弹不出来,只是postback一下.问题在哪里? tianzhenjing(宁静夏天),能仔细分析一下吗?
tianzhenjing 2006-11-21
  • 打赏
  • 举报
回复
考虑一下就可以了,当满足什么条件下postback当什么时候取值并置空,并弹出窗口

三言两语说不清楚,但基本思想就是这样
Nathing0212 2006-11-21
  • 打赏
  • 举报
回复
孟子大哥,关键是我还想postback啊
Nathing0212 2006-11-21
  • 打赏
  • 举报
回复
我想点击时传给showModalDialog参数,参数是动态的,是我随机从服务器控件里取来的,
(用了客户端回调),取出来之后,还想交给服务器,让后台继续处理.

showModalDialog 是写在回调调用函数里的.

主要代码如下:

private string strUserInfo;
....

string ls_script2="";

ls_script2 += "function OnCallback(strUserInfo)";
ls_script2 += "{ ";
ls_script2 += "showModalDialog('t01_m2.aspx?px='+strUserInfo ,null,'status:no;dialogWidth:960px;dialogHeight:500px;help:no;scroll:no');"; //dialogHide:true;
//ls_script2 += "window.location.reload(); ";
//ls_script2 += "return true;";
ls_script2 += "}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "",ls_script+ls_script2+ ls_script3, true);

sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, "", "OnCallback",null);

Button51.Attributes.Add("onclick", sCallBackFunctionInvocation+";return false;"); //问题在此处,既想弹出窗口,还想postback,继续执行服务器的后台代码啊

protected void Button51_Click(object sender, EventArgs e)
{ changelist();
}
......

void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
// throw new Exception("The method or operation is not implemented.");
strUserInfo = (dw_t13_2_1.GetItemString(int.Parse( Request.Params["rownum"]), "lock_state") == null) ? "0" : (dw_t13_2_1.GetItemString(int.Parse(Request.Params["rownum"]), "lock_state"));

请大家帮忙理理怎么实现,或者有其他办法,谢谢.

孟子E章 2006-11-21
  • 打赏
  • 举报
回复
你的方法有问题
1,参照http://dotnet.aspx.cc/article/49ml4ao8-5pb3-4kny-njzd-ljoioxv4m1x4/read.aspx
2,在服务器事件里写
Response.Write("<script>window.returnValue=false;</script>")
tianzhenjing 2006-11-21
  • 打赏
  • 举报
回复
用服务器控件也可以的
例如你有一个Button1服务器控件
然后 写下面的函数

<script language="javascript" type="text/javascript" event="onclick" for="Button1">
var em = showModalDialog("insertEm.htm", "", "dialogWidth:240px; dialogHeight:250px; scroll:no; status:0;help:0");
if( em != 你要的值)
{
return false;//不postback
}
else
{
return true;//postback
}
</script>
softfire007 2006-11-21
  • 打赏
  • 举报
回复
var em = showModalDialog("insertEm.htm", "", "dialogWidth:240px; dialogHeight:250px; scroll:no; status:0;help:0");
Nathing0212 2006-11-21
  • 打赏
  • 举报
回复
的确是服务器端的button.

放弃了,用什么大哥,我还要传参啊
cangwu_lee 2006-11-21
  • 打赏
  • 举报
回复
兼容性不好,放弃吧
memoriccell 2006-11-21
  • 打赏
  • 举报
回复
你用的肯定是服务器端的button,点击后会提交页面,就会把你的window.showModalDialog代码刷掉
但是加上return false以后会阻止页面的提交,这样就不会把window.showModalDialog刷掉了
建议你换成客户端的按钮,如果你的按钮只是需要点击显示模式窗口
加载更多回复(3)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧