在开发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 {
00008
/// <summary>00009
/// 创建打开窗体脚本类00010
/// 注意:返回值参数据接收的数据格式必须00011
/// key=value|key1=value1|.....00012
/// </summary>00013
public class ShowModalDialog : IExecuteScript00014
{00015
private const string _Dialog ="window.showModalDialog({0},' ',' dialogHeight : { 1 } px ;dialogWidth : { 2 } px ; edge : Raised ; center : Yes ; help : No ; resizable : No ; status : No ; scroll :
Yes ;');" ;
00016
#region IExecuteScript 成员00017
private bool mParent = false ;00018
/// <summary>00019
/// 是否需要加载父指向00020
/// </summary>00021
public bool Parent00022
{00023
get00024
{00025
// TODO: 添加 SetElementsValue.Parent getter 实现00026
return mParent ;00027
}00028
set00029
{00030
// TODO: 添加 SetElementsValue.Parent setter 实现00031
mParent = value ;00032
}00033
}00034
private string GetParent ()00035
{00036
if ( Parent )00037
return "parent." ;00038
return "" ;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 ;00049
}00050
public const string PageUrlTag ="pageurl" ;00051
/// <summary>00052
/// 生成脚本00053
/// </summary>00054
/// <returns>string</returns>00055
public string Execute ()00056
{00057
// TODO: 添加 ShowModalDialog.Execute 实现00058
string url ="' " + PageContainer +" ? pageurl ='+" + GetPage ();00059
url = string . Format ( _Dialog , url , Height , Width );00060
url = GetParent () + url ;00061
if ( ReturnElements . Count >0)00062
{00063
url = "var getvalue=" + url +";if(getvalue != null){" ;00064
foreach ( ReturnElement item in ReturnElements )00065
{00066
url += item . GetScript ( GetParent ());
00067
}00068
url +="}" ;00069
return url +";" ;00070
}00071
return url +";" ;00072
}00073
00074
#endregion00075
private string mPageContainer ;00076
/// <summary>00077
/// 获取或设置容器页(包含路径)00078
/// </summary>00079
public string PageContainer00080
{00081
get00082
{00083
return mPageContainer ;00084
}00085
set00086
{00087
mPageContainer = value ;00088
}00089
}00090
private string mOpenPage ;00091
/// <summary>00092
/// 打开的页(包含路径)00093
/// </summary>00094
public string OpenPage00095
{00096
get00097
{00098
return mOpenPage ;00099
}00100
set00101
{00102
mOpenPage = value ;00103
}00104
}00105
private int mHeight =400;00106
/// <summary>00107
/// 获取或设置打开窗体的高度00108
/// </summary>00109
public int Height00110
{00111
get00112
{00113
return mHeight ;00114
}00115
set00116
{00117
mHeight = value ;00118
}00119
}00120
private int mWidth =400;00121
/// <summary>00122
/// 获取或设置打开窗体的宽度00123
/// </summary>00124
public int Width00125
{00126
get00127
{00128
return mWidth ;00129
}00130
set00131
{
00132
mWidth = value ;00133
}00134
}00135
private ReturnElementCollections mReturnElements = new ReturnElementCollections ();00136
/// <summary>00137
/// 获取返回值元素集00138
/// </summary>00139
public ReturnElementCollections ReturnElements00140
{00141
get00142
{00143
return mReturnElements ;00144
}00145
}00146
private ParameterCollection mParameters = new ParameterCollection ();00147
/// <summary>00148
/// 获取打开页面的参数集00149
/// </summary>00150
public ParameterCollection Parameters00151
{00152
get00153
{00154
return mParameters ;00155
}00156
}00157
private string GetPage ()00158
{00159
if ( Parameters . Count ==0)00160
return "' "+OpenPage+" '" ;00161
System . Text . StringBuilder sb = new System . Text . StringBuilder ();00162
sb . Append ("' "+OpenPage+" '" );00163
string param ="" ;00164
string parent = GetParent ();00165
for ( int i =0; i < 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
else00180
{00181
sb . Append ("+' "+System.Web.HttpUtility.UrlEncode(" &") +" '+" + param );00182
}00183
}00184
return sb . ToString ();00185
}00186
00187
00188
00189
}00190
#region subClass00191
public enum ElementType00192
{00193
None ,00194
Element ,00195
Select
00196
}00197
/// <summary>00198
/// 参数描述类00199
/// </summary>00200
public class Parameter00201
{00202
/// <summary>00203
/// 构造参数对象00204
/// </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
Value = value ;00217
}00218
/// <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>00235
public string Name00236
{00237
get00238
{00239
return mName ;00240
}00241
set00242
{00243
mName = value ;00244
}00245
}00246
private string mValue ;00247
/// <summary>00248
/// 获取或设置参数值00249
/// </summary>00250
public string Value00251
{00252
get00253
{00254
return mValue ;00255
}00256
set00257
{00258
mValue = value ;
00259
}00260
}00261
private ElementType mElement = ElementType . None ;00262
/// <summary>00263
/// 获取或设置参数值是否参数名称00264
/// </summary>00265
public ElementType Element00266
{00267
get00268
{00269
return mElement ;00270
}00271
set00272
{00273
mElement = value ;00274
}00275
}00276
}00277
public class ParameterCollection : System . Collections . CollectionBase00278
{00279
public Parameter this [ int index ]00280
{00281
get00282
{00283
return ( ( Parameter ) List [ index ] );00284
}00285
set00286
{00287
List [ index ] = value ;00288
}00289
}00290
00291
public int Add ( Parameter value )00292
{00293
return ( List . Add ( value ) );00294
}00295
00296
public int IndexOf ( Parameter value )00297
{00298
return ( List . IndexOf ( value ) );00299
}00300
00301
public void Insert ( int index , Parameter value )00302
{00303
List . Insert ( index , value );00304
}00305
00306
public void Remove ( Parameter value )00307
{00308
00309
List . Remove ( value );00310
}00311
00312
public bool Contains ( Parameter value )00313
{00314
// If value is not of type Int16, this will return false.00315
return ( List . Contains ( value ) );00316
}00317
00318
}00319
/// <summary>
00320
/// 返回值接收元素描述类00321
/// </summary>00322
public class ReturnElement00323
{00324
/// <summary>00325
/// 构造对象00326
/// </summary>00327
/// <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
/// 获取或设置元素ID00337
/// </summary>00338
public string ID00339
{00340
get00341
{00342
return mID ;00343
}00344
set00345
{00346
mID = value ;00347
}00348
}00349
private string mKey ;00350
/// <summary>00351
/// 获取或设置对应值的键值00352
/// </summary>00353
public string Key00354
{00355
get00356
{00357
return mKey ;00358
}00359
set00360
{00361
mKey = value ;00362
}00363
}00364
/// <summary>00365
/// 获取操作脚本00366
/// </summary>00367
/// <returns>string</returns>00368
public string GetScript ( string parent )00369
{00370
return parent +"document.all(' "+ID +" ').value=" + parent +"__AnalyseString(' "+Key +"',getvalue);" ;
00371
}00372
}00373
public class ReturnElementCollections : System . Collections . CollectionBase00374
{00375
public ReturnElement this [ int index ]00376
{00377
get00378
{00379
return ( ( ReturnElement ) List [ index ] );00380
}
00381
set00382
{00383
List [ index ] = value ;00384
}00385
}00386
00387
public int Add ( ReturnElement value )00388
{00389
return ( List . Add ( value ) );00390
}00391
00392
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 , value );00400
}00401
00402
public void Remove ( ReturnElement value )00403
{00404
00405
List . Remove ( value );00406
}00407
00408
public bool Contains ( ReturnElement value )00409
{00410
// If value is not of type Int16, this will return false.00411
return ( List . Contains ( value ) );00412
}00413
}00414
#endregion00415
}下载例子和相关源码
http://henryfan.cnblogs.com/archive/2006/05/12/398276.html
00007