在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
对于Asp.Net 2.0中WebResource的研究(1) 当我们改变Page的属性或增加某些服务器控件之后,页面会自动将这些资源的引用地址注册到页面上。
<script src="/WebResource.axd?d=ZnL1CDIew0DLWTT0rctn7A2&t=633118963218359345" type="text/javascript"></script>
这一工作是由System.Web.Handlers.AssemblyResourceLoader的GetWebResourceUrl方法完成的。 但是由于这些资源中定义了很多webform中常用的一些脚本函数,有时候也许你希望能够利用这些函数,那么如何能得到这一脚本引用或者将其注册到页面上呢? 这里首先介绍一个调用.net框架类库中的一些internal方法的技巧,实质是利用反射: 访问.net类的private或internal成员
Type t = typeof(System.Web.Handlers.AssemblyResourceLoader);
object[] args = new object[] { typeof(Page),"WebForms.js", true }; BindingFlags bindingFlags = BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod; string result = (string)(t.InvokeMember("GetWebResourceUrl", bindingFlags, null, null, args)); Page.ClientScript.RegisterStartupScript(typeof(_Default),"abc", String.Format("<script src=\"{0}\" type=\"text/javascript\"></script>", result)); 上面的方式是直接获取正确的资源文件,并将其注册到页面上。 下面介绍另外一种方法,就是直接利用反射调用Page类的RegisterWebFormsScript方法:
Type t = typeof(System.Web.UI.Page);
BindingFlags bindingFlags = BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod | BindingFlags.Instance; t.InvokeMember("RegisterWebFormsScript", bindingFlags, null, this, null);
大家可以仔细比较2者在运行时的区别,从呈现层面来讲,前者比较灵活,但是可能重复注册脚本引用,后面的方法则不会出现这一情况。事实上,对于前者,Page类中有一个私有变量记录了页面是否已经注册过脚本引用,该字段名称是_fWebFormsScriptRendered,可以根据此变量检测页面上是否已经注册这一脚本引用 在Asp.Net2.0中还有另外一种方法更加简便:
this.Page.ClientScript.RegisterClientScriptResource(typeof(System.Web.UI.Page), "WebForms.js");
而另外一条语句也是否有用,通常用作获取自定义的嵌入文件引用:
string includeLocation =
Page.ClientScript.GetWebResourceUrl(this.GetType(), "myStyleSheet.css"); 这里我们可以使用:
string includeLocation =
Page.ClientScript.GetWebResourceUrl(typeof(Page), "WebForms.js");
WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
WebForm_DoPostBackWithOptions(options) WebForm_DoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) WebForm_CallbackComplete() WebForm_ExecuteCallback(callbackObject) WebForm_FillFirstAvailableSlot(array, element) WebForm_InitCallback() WebForm_InitCallbackAddField(name, value) WebForm_EncodeCallback(parameter) WebForm_ReEnableControls() WebForm_ReDisableControls() WebForm_FireDefaultButton(event, target) WebForm_GetScrollX() WebForm_GetScrollY() WebForm_SaveScrollPositionSubmit() WebForm_SaveScrollPositionOnSubmit() WebForm_RestoreScrollPosition() WebForm_TextBoxKeyHandler(event) WebForm_AppendToClassName(element, className) WebForm_RemoveClassName(element, className) WebForm_GetElementById(elementId) WebForm_GetElementByTagName(element, tagName) WebForm_GetElementsByTagName(element, tagName) WebForm_GetElementDir(element) WebForm_GetElementPosition(element) WebForm_GetParentByTagName(element, tagName) WebForm_SetElementHeight(element, height) WebForm_SetElementWidth(element, width) WebForm_SetElementX(element, x) WebForm_SetElementY(element, y)
|
请发表评论