近來接手一個項目,autoweb開發,但是autoweb提供的模板相對固定,所以,只好用vs來開發,後續用iframe來嵌套到autoweb中。
其中一個問題,是動態產生的gridview,裏面有兩塊彈出新窗體(沒有用服務器控件!):
<asp:templatefield headertext="管理員更新"> <ItemTemplate> <a href="#" onclick="window.open('rpAdminupdateinfo.aspx?uniqueid=<%#Eval("uniqueID") %>','newwin','height=200,width=300,top=80,left=90,toolbar=no,menubar=no,scrollbars=no, resizable=yes,location=no, status=no')"> <%#Eval("管理員更新信息")%></a> </ItemTemplate> </asp:templatefield> <asp:templatefield headertext="Eidt"> <ItemTemplate> <a href="#" onclick="window.open('rpAdminDetailEdit.aspx?uniqueid=<%#Eval("uniqueID") %>','newwin','height=320,width=400,top=70,left=80,toolbar=no,menubar=no,scrollbars=no, resizable=yes,location=no, status=no')">修改</a> </ItemTemplate> </asp:templatefield>
彈出新窗體(第二個),設置兩個按鈕(一個用html控件,控制關閉窗體,一個用服務器控件,方便取值):
<asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click" CssClass="bt" /> <input id="btnCancel" class="bt" onclick="window.close();" type="button" value="取消" />
對於【保存】按鈕,保存成功后刷新父窗體,出現一些麻煩。網上查詢,一個方法是,服務器控件button控件在Page_Load事件中添加btn.Attributes.Add("onclick","window.close()");發現,點擊保存按鈕后,btnSave事件根本沒有執行,而是先執行Page_Load事件,然後直接window.close。這aspnet頁面順序看來得時時注意呢。另一個方式是,是用html控件,onclick="window.close()"。這個加載db的數據,有困難。放棄。
最後,還是從btnSave事件著手,在執行完更新后,添加代碼
Response.Write("alter('OK')"); string msg = "window.opener.location.reload();window.close()"; Page.ClientScript.RegisterStartupScript(this.GetType(), "suclog", msg, true);
窗口關閉,父窗體刷新,OK了。