a和b两页面都有一DataList,当某行处于Select时,该行出现一按钮列,单击一按钮,弹出同一模式窗体,在模式窗体中做些操作后,能刷新父窗体,模式窗体本身不关闭,在a和b页面中DataList的ItemDataBound事件的代码如下:
if(e.Item.ItemType == ListItemType.SelectedItem)
{
btnUniversalQuery = (Button)e.Item.FindControl("btnUniversalQuery");
strReportID = dlReportDefine.DataKeys[e.Item.ItemIndex].ToString();
string strUniversalQueryUrl = "UniversalQuery.aspx?QueryGroupID=" + strReportID;
btnUniversalQuery.Attributes.Add("onclick", "javascript:win=showModalDialog('" + strUniversalQueryUrl +"',window,'dialogWidth=266px;dialogHeight=230px;status=no;scroll=no;resizable=no;');window.opener=win;");
}模式窗体中刷新父窗体的代码如下:
Session["QuerySQL"] = tbQueryConditionSQL.Text + " " + strSQLOrder;//父窗体读取Session,加载数据
Page.RegisterStartupScript("","<script language='javascript'>window.dialogArguments.location.reload();</script>");现在的问题是,有时,能弹出模式窗体而且能刷新父窗体,有时连模式窗体都无法弹出,而有时弹出模式窗体又无法刷新父窗体,好象是随机的,不应该是这样的啊?请大虾看看。

解决方案 »

  1.   

    模式弹出窗口有时session会出问题
      

  2.   

    to cansum396
    弹出应该是没问题的啊,但是,有时连弹出都有问题。
      

  3.   

    模式窗口中用下面的代码试试
        Public Sub DataGrid_Control(ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
            Dim Obj As Object
            If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
                Obj = e.Item.FindControl("Txt")
                Obj.Attributes.Add("onkeydown", "if(event.keyCode==13) {var a=new Array(DataGrid1__ctl" + Trim(Str(e.Item.ItemIndex + 2)) + "_Txt.value); window.opener=null;window.returnValue =a;window.close()}")
            End If
        End Sub
      

  4.   

    to cansum396
    这个可能能够解决快捷键的问题,现在我准备不用那个,就鼠标单击就可以了。
    很谢谢你:)
      

  5.   

    <HEAD>
    <title>ErrorCatchForm</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <base target="_self">
    <% Response.Expires = -1 %>
    </HEAD>
      

  6.   

    rickjelly2004(rick & jelly):我是这样设置的:
    <base target="_self">
    <% Response.Expires = 0 %>
      

  7.   

    btnUniversalQuery.Attributes.Add("onclick", "javascript:win=showModalDialog('" + strUniversalQueryUrl +"',window,'dialogWidth=266px;dialogHeight=230px;status=no;scroll=no;resizable=no;');window.opener=win;");
    }
    这代码你最好写在PAGELOAD中
    因为你写在那里页面刷新一下就没了
      

  8.   

    关于模态窗口(showModalDialog)的专题讨论!
    1.模态窗口的打开
    2.模态窗口的关闭
    3.模态窗口的传递参数。
    4.其他。
    1.window.showModalDialog("DialogPage.aspx","newwin","dialogHeight: 200px; dialogWidth: 150px; dialogTop: 458px; dialogLeft: 166px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;");2.window.close();3.传值
    ParentPage.aspx:
    window.showModalDialog("DialogPage.aspx?para1=aaa&para2=bbb");DialogPage.aspx:
    string str1=Request.QueryString["para1"].toString();
    string str2=Request.QueryString["para2"].toString();返回值
    DialogPage.aspx:
    window.returnValue="aaa";ParentPage.aspx:
    var str=window.showModalDialog("DialogPage.aspx");4.
    aspx页面在showmodeldialog情况下为什么一提交就重新打开一个页面?
    showmodaldialog打开的页面中在<head></head>之间加入一行:<base target="_self">
      

  9.   

    to rickjelly2004(rick & jelly) 不可能写在pageload中啊,因为是DataList中某项处于Select状态时,才会有这个按钮存在的。
      

  10.   

    那你判断一下呀
    这样你在PAGELOAD中加一段代码:if dlReportDefine.selectedindex<>-1 thenbtnUniversalQuery = (Button)dlReportDefine.Items(dlReportDefine.selectedindex).FindControl("btnUniversalQuery");
    strReportID = dlReportDefine.DataKeys[e.Item.ItemIndex].ToString();
    string strUniversalQueryUrl = "UniversalQuery.aspx?QueryGroupID=" + strReportID;
    btnUniversalQuery.Attributes.Add("onclick", "javascript:win=showModalDialog('" + strUniversalQueryUrl +"',window,'dialogWidth=266px;dialogHeight=230px;status=no;scroll=no;resizable=no;');window.opener=win;");
    }end if
      

  11.   

    我觉得你的思路有问题。一般来说,模态对话框的作用是取得一些用户的输入参数,或者显示信息什么的。
    然后关闭后才传给父页面。在打开模式对话框的时候操作父窗体是不合理的做法。换句话说,你应该使用非模式对话框:window.showModelessDialog()
      

  12.   

    楼上这位说得对
    回复人: inelm(木野狐)(坚持手写HTML是我唯一的选择) ( ) 信誉:100 模式窗口不是这么用的。
      

  13.   

    to  rickjelly2004(rick & jelly)我觉得写在ItemDataBound事件中跟在pageload中一样啊。
    因为只要我改变DataList的状态,就会重新数据绑定,自然也就有onclick事件了。而且,在其中一个页面中好象只偶尔无法刷新,而另一个页面就很糟糕了。
      

  14.   

    为什么我不关闭模式窗体而刷新父窗体呢?模式窗体是做查询用的,操作完后返回查询的SQL语句,为了给用户更改查询条件的机会而不用再弹出窗体,所以就没关闭模式窗体了。至于不用无模式窗体,因为每次只允许用户查询一类信息,也就是不允许他操作父窗体,避免他更改查询类型。
      

  15.   

    如果用var str=window.showModalDialog("DialogPage.aspx");返回查询字符串,
    那怎么在cs中引用这个字符串呢?
      

  16.   

    如果用var str=window.showModalDialog("DialogPage.aspx");返回查询字符串,
    那怎么在cs中引用这个字符串呢?你可以在页面中加一个hidden控件.id=hid;
    hid.value=window.showModalDialog("DialogPage.aspx");
    然后提交 Form1.submit 或__dopostback
    你在 cs中就可得到hid.value