[转] "smartnavigation" super slimming weight loss slim version of ClientnaVigation

xiaoxiao2021-03-06  105

In my two articles, I introduced the implementation of the SMARTNAVigation attribute of the Page class (.NET Framework

1.1 /

2.0 Implementation of SmartNavigation), although M $ is very clever, this "stealing" also brings some negative impacts. They are mainly manifested in these aspects:

1, the page can no longer use the Forward and Backward provided by the browser, because these two action functions on the Window.Document object, and the page that we actually submit is the iframe in this document, which cannot be F & B. This problem is very depressed because the user can't make Backward, which will lose a lot of forms of form that fail to submit success during submission;

2, troubleshoot the debugger, we can't see the true HTML source code of the current page, because the information of the server Response is still in IFRAME, we can only see the old information in Doucment;

3. For the case of the original page, the smartnavigation is affirmed by the SMARTNAVigation. Just after the page is updated, since the Doucment does not have updated, there is no processing of dynamically generated HTML objects.

4, compatibility, current SmartNavigation does not consider compatibility issues, like Opera, Konquer, etc., cannot correct Navigate;

5. You cannot get the request.urlreferRer quote, urlreferrer is always empty;

6. After submitting the form, use the Rander Alert (...) to generate a page of the user prompt, when using the smartnavigation page, the expected Alert window cannot be displayed after commit;

7. Submit for some special symbols Generate bugs, for example, in the page using SmartNavigation, if you write a "` "(click the key below the ESC below) to the TEXTBOX. After Submit, TextBox disappears, in Submit, the textbox appears, but the value is no longer;

8. CSS Styesheet written in , will be lost after the first Submit, which can be seen from the SMARTNAVigation source code of 1.1, when he is handling , only And <mate>;</p> <p>9, the defaultRedirect property cannot be executed correctly, this can be viewed by M $</p> <p>KB813831.</p> <p>In general, the emergence of SmartNavigation is still nice, but because it is really complicated, there is also a lot of problems. So use the SmartNavigation function must be cautious, and you don't think about the page that is too complex and embedded in a large number of JScript scripts.</p> <p>Luo Yi for a long time, the real protagonist has not yet been played, it is really failure.</p> <p>. Let's take a look at my "smartnavigation" super slimming slimming version:</p> <p>Actually, it is too simple, that is, the scrolltop, response, and response after the SET this scrolltop, but I made a control, let the page have Navigate to the page. code show as below:</p> <p>Using</p> <p>System;</p> <p>Using</p> <p>System.collections;</p> <p>Using</p> <p>System.componentmodel;</p> <p>Using</p> <p>System.drawing;</p> <p>Using</p> <p>System.text; using</p> <p>System.Web;</p> <p>Using</p> <p>System.Web.ui;</p> <p>Using</p> <p>System.Web.ui.design;</p> <p>Using</p> <p>System.Web.ui.WebControls;</p> <p>Using</p> <p>System.Web.ui.htmlControls;</p> <p>Namespace</p> <p>Birdshome.web.ui.webcontrols</p> <p>{/ ** ///// <Summary> /// Summary Description for class1. /// </ summary> [design.clientnavigationDesigner)] [ToolboxData "] [ToolboxData"] [ToolboxData "] }: ClientNavigation runat = "server"> </ {0}: ClientNavigation> ")] public class ClientNavigation: WebControl, INamingContainer, IPostBackDataHandler {public ClientNavigation (): base () {} public int Position {get {object obj = ViewState ["Position"]; return obj == null? 0: (int) obj;} set {viewState ["position"] = value;}}} protected override void render (htmlTextwriter Writer) {this.registerClientScript (); Writer. AddAttribute (HtmlTextWriterAttribute.Type, "hidden"); writer.AddAttribute (HtmlTextWriterAttribute.Id, this.ClientID); writer.AddAttribute (HtmlTextWriterAttribute.Name, this.ClientID); writer.AddAt tribute (HtmlTextWriterAttribute.Value, this.Position.ToString ()); writer.RenderBeginTag (HtmlTextWriterTag.Input); writer.RenderEndTag ();} private void RegisterClientScript () {const string REGISTER_KEY = "__ClientNavigate586787__"; string strScript = @ " <script language = "JavaScript"> window.onload = function () {{var scrollpsn = {0}; var scrollcount = 0; do {{scrollcount ;</p> <p>window.scrollTo (0, scrollPsn);}} while (document.body.scrollTop <scrollPsn && scrollCount <10);}} document.body.onscroll = function () {{document.all {1} ​​.value = document. .body.scrollTop;}} </ script> "; if {strScript = String.Format (strScript, this.Position, this.ClientID) (this.Page.IsStartupScriptRegistered (REGISTER_KEY)!); this.Page.RegisterStartupScript (REGISTER_KEY , strScript);}} IPostBackDataHandler Members # region IPostBackDataHandler Members public void RaisePostDataChangedEvent () {// TODO: Add ClientNavigation.RaisePostDataChangedEvent implementation} public bool LoadPostData (string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) {int iPosition = int. Parse (PostCollection " StdataKey]); if (iposition! = this.position) {this.position = iposition; return true;} #endregion}} This clientnavigation has a problem, that is, you can drag multiple to a page, although it does not affect Use, but I don't know if there is any good way to let the control only one more on a Page.</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-96332.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="96332" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.039</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = 'm_2FQi_2F0JMNpfoiMwPJStJU82Go4IthX_2BI_2Fdk_2FuvW_2BkTn_2BuIe0Td0EIV7N555hvmhpM7hj4L_2FvHpzI0Ycstp0WLA_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>