凯锐

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  101 随笔 :: 39 文章 :: 377 评论 :: 25 引用
      利用.NET代碼實現點擊按鈕彈出新窗體,輸入數據后返回並刷新頁面,網上大部份都是JavaScript實現,為使用方便,本人將其封裝進一段.NET代碼中。只所以稱作.net代碼,是因為C#/VB各一份嘍:)
     也是因為自己的項目中要用到一項類似於Winform的Messagebox.ShowDialog這樣的功能,起初以為跟Winform差不了多少的,誰知做的時候卻出現了很多"難以預料"的問題,本著解決問題的程序員的態度,花了一個下午的時間,將遇到的問題基本上全解決了。記錄一下,或許會有朋友也存在類似問題,為免少走一些元枉路,索引再花點時間整理了一下。
以下講解部分使用VB講解,喜歡C#的可以在隨后的附件中下載C#版本。
      首先新建一個Default.aspx文件,在aspx Source中輸入:
Default.aspx
      然后轉至CodeFile輸入代碼:
Default.aspx.vb
      很明顯,我上面只是簡單的string拼接。記得曾經在某網站看到說用StringBuilder的優於直接String的拼接吧。原理上是的,如果你愿意,就自行改用StringBuilder吧
     接下來再加一個aspx文件,直接在aspx Source中輸入如下:
Default2.aspx
      這個比較簡單,CodeFile就沒有什么啦。
      加入第三個aspx, aspx Source如下:
Default3.aspx
      註意一下<body id="MyBody" runat="server">這句話,vs2005默認產生的Document的body是沒有id,runat的,這里請手工加上去。
     CodeFile如下:
Default3.aspx.vb
     基本上就是這樣子的,做完之后感覺很簡單,呵呵。當然,這個也沒有花很多時間,因為網上的現成代碼很多的。見隨后的參考文獻2
      所花時間多的是隨后,將其放入真實項目中的時候,真實項目中,由於使用到了2.0的新加功能MasterPage,這下好了,將上面代碼原封不動的拷進去,總沒有效果出來,最后不得以設定了一下調試,說什么獲取不到對像,原話是什么,我也不記得,大概意思就是這樣子了,現在已經沒有了錯誤,我總不會為了重現這個錯誤,再試一下吧。呵呵:)如果你有興趣見識的話,將下載的原碼中document.getElementById('" + tbxMsg.ClientID + "').value這句話改成document.getElementById(' tbxMsg').value就可看到效果了。
      其實,我能夠想到加ClientId也是帶點僥幸的意味的。因為有VS2005強勁的JavaScript調試功能才得以得逞:)。調試時我發現在頁面生成之後,原來的頁面中的tbxMsgx id被改成類似這樣一個東西 ctl00$ContentPlaceHolder1$tbxMsg1於是就用這個代替了原先的tbxMsg,當時程序沒有報錯,也就是通過了,效果也出來了。呵呵,於是我記起WebUI Control好像都有一個什么ClientID的屬性。應該就類似於上面ctl00$ContentPlaceHolder1$tbxMsg1的東西吧。於是就用tbxMsg.ClientID試了一下。居然正確,有點歪打正著的感覺!竊喜ing.......:)

      下載文件當中的MasterPage參考了CodeProject上的一篇文章,見參考文獻1.
       說這些說了這麼多,也不知道你有沒有耐心看下去,還是附上解決方案吧,看Demo可能有些人覺得更實在。

模式窗體傳值源碼下載

參考文獻:
1、Creating a Common Toolbar in ASP.NET 2.0 using MasterPage, Delegate and Events.
2、CSDN明飛的專欄
posted on 2007-10-09 21:49 凯锐 阅读(1753) 评论(6) 编辑 收藏

评论

◎这个clientid主要是为了防止页面存在同id的控件而已,这个你完全可以从datagrid的item模版列添加一个控件可以看出来!

在1.1下我同样写出了以下几个,给你参考看看
public static void PopupConfirm(System.Web.UI.Page mypage,string info,string YesURL,int Width,int Height)
{
string windowAttribs;

windowAttribs = "dialogHeight: "+Height.ToString()+"px; dialogWidth: "+Width.ToString()+"px;edge: Raised; center: Yes; help: No; resizable: No; status: No; scroll:No;";
info = info.Replace("\n","");

string strscript="<script language='javascript'>\n";
strscript += "input_box=confirm('"+ info +"');\n";
strscript += "if(input_box){window.showModalDialog('"+YesURL+"','','"+windowAttribs+"');}\n";
strscript += "</script>";
if(!mypage.IsStartupScriptRegistered("ConfirmMsg"))
mypage.RegisterStartupScript("ConfirmMsg", strscript);
}
public static void popUpWindow(System.Web.UI.Page mypage,string YesURL,int Width,int Height)
{
string windowAttribs;
windowAttribs = "dialogHeight: "+Height.ToString()+"px; dialogWidth: "+Width.ToString()+"px;edge: Raised; center: Yes; help: No; resizable: No; status: No; scroll:No;";
string strscript="<script language='javascript'>\n";
strscript += "window.showModalDialog('"+YesURL+"','','"+windowAttribs+"');\n";
strscript += "</script>";
if(!mypage.IsStartupScriptRegistered("ConfirmMsg"))
mypage.RegisterStartupScript("ConfirmMsg", strscript);
}

public static void OpenPopUp(System.Web.UI.WebControls.WebControl opener,string PagePath,string windowName,int Top,int Left,int width,int height)
{
string clientScript;
string windowAttribs;
windowAttribs = "left=" + Left.ToString() + "px," +
"top=" + Top.ToString() + "px," +
"width=" + width.ToString() + "px," +
"height=" + height.ToString() + "px," +
"left='+((screen.width -" + width.ToString()+ ") / 2)+',";
clientScript = "window.open('"+PagePath+ "','"+
windowName + "','"+ windowAttribs + "');return false;";
opener.Attributes.Add("onClick", clientScript);
}
public static void OpenPopUp(System.Web.UI.Page mypage,string PagePath,string windowName,int Top,int Left,int width,int height)
{
string clientScript;
string windowAttribs;
windowAttribs = "left=" + Left.ToString() + "px," +
"top=" + Top.ToString() + "px," +
"width=" + width.ToString() + "px," +
"height=" + height.ToString() + "px," +
"left='+((screen.width -" + width.ToString()+ ") / 2)+',";
clientScript = "<script language='javascript'> window.open('"+PagePath+ "','"+
windowName + "','"+ windowAttribs + "');</script>";
if(!mypage.IsStartupScriptRegistered("PopupWin"))
mypage.RegisterStartupScript("PopupWin", clientScript);
}
 回复 引用   

#2楼 2007-10-09 23:23 天极[未注册用户]
◎另外孟子e章上面也有类似的实现,说实在话,完全不需要3个页面来完成!
只要两个页面就ok了


 回复 引用   

#3楼 2007-10-10 00:28 琨[未注册用户]
这个还是用JS,只是调用.NET而已
 回复 引用   

#4楼[楼主] 2007-10-10 08:49 旌浪      
@天极
感謝你提供的方法,至於你說的只要兩個頁面即可完成,我並沒有弄懂,因為我曾將Default2.aspx去掉后,就出現瀏覽器說要關閉,按是的話,就會關閉頁面的。所以還是按照原來的用了一個Default2.aspx。
另外就是你上面的方法調用后,如何返回值回來?
 回复 引用 查看   

#5楼 2007-10-10 22:06 天极[未注册用户]
public static void showmessageRet(System.Web.UI.Page mypage,string info,string retVal)
{
info = info.Replace("\n","");
//string scriptClientId=string.Empty;
string strscript="<script language='javascript'>";
strscript += "alert('"+ info +"');";
strscript += "window.parent.returnValue=" + retVal + ";";
strscript += "window.close();";
strscript += "</script>";
if(!mypage.IsStartupScriptRegistered("ShowMsg"))
mypage.RegisterStartupScript("ShowMsg", strscript);

}

 回复 引用   

#6楼[楼主] 2007-10-11 08:42 旌浪      
@天极
謝謝指點。
 回复 引用 查看