在開發ASP.NET應用程式過程中編寫Script是件很煩人的事情,其實我們可以把常用的Script裝成相應的.NET組件在服務端調用,這樣可以大大簡化Script的編寫還提高的Script的重用.
以下是常用的開啟模式窗體並取得返回值的類別調用,實際上可以給設定多個參數傳入和不同控制項取得不同返回值的結果.
定義開啟窗體並設定回傳值腳本類別.
HFSoft.Web.Scripts.ShowModalDialog dialog=new HFSoft.Web.Scripts.ShowModalDialog(
XXX.Units.Config.WebBoot+"Appunit/WindowOpenDialog.aspx",
FrmFailureLogSearch.PageURI());
dialog.Height=400;
dialog.Width=600;
dialog.ReturnElements.Add(new HFSoft.Web.Scripts.ReturnElement(this.txtReturn.ClientID,"ReturnString"));
HFSoft.Web.Scripts.RegisterScript.RegiOnClick(cmdSearch,dialog);
開啟窗體設定回傳值的程式碼
HFSoft.Web.Scripts.ReturnValues returnValue=new HFSoft.Web.Scripts.ReturnValues();
returnValue.Add("ReturnString",filter);
HFSoft.Web.Scripts.RegisterScript.RegiPageClient(this,"return",returnValue);
開啟窗體類別的程式碼(其實很多Script都可以透過這樣的方式來封裝).
00006 namespace HFSoft . Web . Scripts
00007 {
00008 /// <summary>
00009 /// 建立開啟窗體腳本類別
00010 /// 注意:傳回值參資料接收的資料格式必須
00011 /// key=value|key1 =value1|.....
00012 /// </summary>
00013 public class ShowModalDialog : IExecuteScript
00014 {
00015 private const string _Dialog ="window.showModalDialog({0x},',', log* ;
dialogWidth : { 2 } px ; edge : Raised ; center : Yes ; help : No ; resizable : No ; status : No ; scroll :
Yes ;');" ;
00016 #region IExecuteScript 成員
00017 private boolse
; // <summary>
00019 /// 是否需要載入父指向
00020 /// </summary>
00021
public bool Parent
00022 {
00023 get
00024 {
00025
// TODO: 新增SetElementsValue.Parent0 實
作
set
00029 {
00030 // TODO: 新增SetElementsValue.Parent setter 實作
00031 mParent = value ;
00032
}
00033 }
00034 private string GetParent ()
00035
{
0036 ;
00039 }
00040 /// <summary>
00041 /// 建構物件
00042 /// </summary>
00043 /// <param name="pageContainer">容器頁</param>
00044 /// <param name="openPage" >具本開啟的頁面</param>
00045 public ShowModalDialog ( string pageContainer , string openPage )
00046
{
00047
PageContainer = pageContainer ;
00048 OpenPage = openPage ;
mary
>
00052 /// 產生腳本
00053 /// </summary>
00054 /// <returns>string</returns>
00055
public string Execute ()
00056 {
00057 // TODO: 加入SMohowDialog.
' " + PageContainer +" ? pageurl ='+" + GetPage ();
00059 url = string . Format ( _Dialog , url , Height , Width );
00060 url = GetParent () + url ;
00061 if ( ReturnElements Count )
00062 {
00063 url = "var getvalue=" + url +";if(getvalue != null){" ;
00064 foreach ( ReturnElement item in ReturnElements )
00065 {
00066 url += itParem . GetScript;
-------------------------------------------------- ------------------------------
00067 }
00068 url +="}" ;
00069
return url +";" ;
00070 }
00071
return url +";" ;
00072 }
00073
00074 #endregion 00075 072
} 00073 00074 #endregion 00075 07/string ;
取得或設定
容器頁(包含路徑)
00078 /// </summary>
00079 public string PageContainer
00080 {
00081 get
00082 {
00083 return mPageContainer ;
00084 }
00085 setPue
;
00089
}
00090 private string mOpenPage ;
00091 /// <summary>
00092///
開啟的頁面(包含路徑)
00093 /// </summary>
00094
public string OpenPage
00095
{
00096 get
00097 {
00098 return mpenPage ;
OpenPage = value ;
00103 }
00104 }
00105 private int mHeight =400;
00106 /// <summary>
00107 /// 取得或設定開啟窗體的
高度00108 /// </summary>
00109 設定開啟
窗體
的高度00108
/// </summary>00109.
00113 return mHeight ;
00114 }
00115 set
00116 {
00117 mHeight = value ;
00118 }
00119 }
00120 private int mWidth =400;
00121/sum <mary> 1
/
sum /summary>
00124 public int Width
00125 {
00126 get
00127 {
00128 return mWidth ;
00129 }
00130 set
00131 {
-------------------------------------------------- ------------------------------
00132 mWidth = value ;
00133 }
00134 }
00135 private ReturnElementCollections mReturnElements = new ReturnElementCollections ();
00136 /// <summary>
00137
/ 取得
回傳值元件
集140 {
00141 get
00142 {
00143 return mReturnElements ;
00144 }
00145 }
00146 private ParameterCollection mParameters = new ParameterCollection ();
00147
/// <summary>
00148/
100160147 ection Parameters
00151 {
00152 get
00153 {
00154 return mParameters ;
00155 }
00156 }
00157 private string GetPage ()
00158 {
00159 if (private string GetPage () 00158 { 00159 if (private string GetPage () 00158 { 00159 if (private 10000 .
Text
. StringBuilder sb = new System . Text . StringBuilder ();
00162 sb . Append ("' "+OpenPage+" '" );
00163 string param ="" ;
00164 string parent = GetParent ();
00165 for (int i = int i =000; Parameters . Count ; i ++)
00166 {
00167 if ( Parameters [ i ]. Element == ElementType . Element )
00168 {
00169 param ="' " + Parameters[i].Name +" =' + " + parent +" document.all('
"+Parameters[i].Value + " ').value" ;
00170 }
00171 else if ( Parameters [ i ]. Element == ElementType . Select )
00172 {
00173 param ="' " + Parameters[ i].Name +" =' + " + parent +"__getSeletedButton(" + parent +
"document.all(' "+Parameters[i].Value + " '))" ;
00174 }
00175 if ( i ==0 )
00176 {
00177 sb . Append ("+' "+System.Web.HttpUtility.UrlEncode(" ?") +" '+" + param );
00178 }
00179 else
00180 { 0018180
{ send send sb+ System.Web.HttpUtility.UrlEncode(" &") +" '+" + param );
00182 }
00183 }
00184 return sb . ToString ();
00185
}
00186
00187 00188
00198
00186 00187 00180019
00192
{
00193 None ,
00194 Element ,
00195 Select
-------------------------------------------------- ------------------------------
00196 }
00197 /// <summary>
00198 /// 參數描述類別
00199 /// </summary>
00200 public class Parameter
00201 {
00202 /// <summary>
00203 /// 建構參數
00203 summary>
00205 public Parameter ()
00206 {
00207 }
00208 /// <summary>
00209 /// 建構指定名稱和值的參數物件
00210 /// </summary>
00211 /// <param name="name">參數名稱</param>
00212 /// <param name="value">參數值</param>
00213 public Parameter ( string name , string value )
00214 {
00215 Name = name ;
00216 ) 00214 { 00215 Name = name ;00216 ) 00214 { 00215 Name = name ;
00216 )
00216 0021 // <summary>
00219 /// 建構指定名稱和值的參數物件
00220 /// </summary>
00221 /// <param name="name">參數名稱</param>
00222 /// <param name ="value">參數值</param>
00223 /// <param name="iselement">值是否元素名稱</param>
00224 public Parameter ( string name , string value , ElementType element )
00225 {
00226 Name = name ;
00227 Value = value ;
00228 Element = element ;
00229 }
00230
00231 private string mName ;
00232 /// <summary>
00233 /// 取得或設定參數
名稱00234/ <summary> 00233
///
取得
或設定參數名稱00234/1002500025002502500250 get
00238 {
00239 return mName ;
00240 }
00241 set
00242 {
00243 mName = value ;
00244 }
00245 }
00246 private string mValue //設定值 00245 } 00246 private string mValue
//
002470
y
>
00250 public string Value
00251 {
00252 get
00253 {
00254 return mValue ;
00255 }
00256 set
00257 {
00258 mValue = value ;
-------------------------------------------------- ------------------------------
00259 }
00260 }
00261 private ElementType mElement = ElementType . None ;
00262
/// <summary>
00263
///
取得或設定參數值是否參數名稱
00264 /// </summary>
00265 Element Element
00269 return mElement ;
00270 }
00271 set
00272 {
00273 mElement=
value ;
00274 }
00275 }
00276 }
00277public
class ParameterCollection :Base . Collection 0. 280
{
00281 get
00282 {
00283 return (
( Parameter ) List[
index ] );
00284 }
00285 set
00286 {
00287 List [ index ] = value ;
00288 }
00289 }
00290
00291 public int Add 20.
);
00294 }
00295
00296 public int IndexOf ( Parameter value )
00297 {
00298 return ( List . IndexOf ( value ) );
00299 }
00300
00301 public void 003030 30300 0301 public v.
index,
value );
00304 }
00305
00306 public void Remove ( Parameter value )
00307 {
00308
00309 List . Remove ( value );
00310 }
00311
00312 public bool Contains (00310 }
00311 00312 public bool Contains (
00310) 0meter Int16, this will return false.
00315 return ( List . Contains ( value ) );
00316 }
00317
00318 }
00319 /// <summary>
-------------------------------------------------- ------------------------------
00320 /// 回傳值接收元素描述類別
00321 /// </summary>
00322 public class ReturnElement
00323 {
00324 /// <summary>
00325 /// 建構物件
00326 /// </summary>
003277// // param name="id">接收值的元素ID</param>
00328 /// <param name="key">對應值的鍵值</param>
00329 public ReturnElement ( string id , string key )
00330 {
00331 ID = id ;
00332 Key = key ;
00333 }
00334 private string mID ;
00335 /// <summary>
00336///
取得或設定元素ID 00337 /// </summary> 00338 取得或設定元素
ID
00337 /// </summary>
00338
public string ID
030303030 00303000342 return mID ;
00343 }
00344 set
00345 {
00346 mID = value ;
00347 }
00348 }
00349 private string mKey ;
00350
/// <summary> 003 //
10003 >
00353 public string Key
00354 {
00355 get
00356 {
00357 return mKey ;
00358 }
00359 get0360
{
00361 mKey = value ; 00362300360 { 00361 mKey = value ;
003620036040303003
/sum 66
///
<
/ summary>
00367 /// <returns>string</returns>
00368 public string GetScript ( string parent )
00369 {
00370 return parent +"document.all(' "+ID +" ').value=" + parent +"document.all(' "+ID +" ').value=" + parent +"__alyAnaly (' "+Key +"
',getvalue);" ;
00371 }
00372 }
00373 public class ReturnElementCollections : System . Collections . CollectionBase
00374 {
00375
public ReturnElement this [ int index ]
00376 {
00375
public ReturnElement this [ int index ]00376 { 078 List [ index ] );
00380 }
-------------------------------------------------- ------------------------------
00381 set
00382 {
00383 List [ index ] = value ;
00384 }
00385 }
00386
00387
public int Add ( ReturnElement value )
00388 {
00389
return ( Listue.
public int IndexOf ( ReturnElement value )
00393 {
00394 return ( List . IndexOf ( value ) );
00395 }
00396
00397 public void Insert ( int index , ReturnElement value )
00398 {
00399 List . Insert index 0ue ) 00398 { 00399 List . Insert ( (
ReturnElement
value
)
00403 {
00404
00405 List . Remove ( value );
00406 }
00407
00408 public bool Contains ( ReturnElement value )
00409 {
00410 // If value is not of type 16, return 1. )
);
00412 }
00413 }
00414 #endregion
00415 }