• Web Client Guidance研究3


    1 使用window.location.hash而不是window.location.href
    window.location.hash = stateData;
    产生的链接结果如下
    http://www.mycompany.com/mypage.aspx#someState


    2 自动化脚本下载和并行下载,使用Ajax Library中的Sys.require方法
    <script src="../Scripts/MicrosoftAjax/start.js" type="text/javascript"></script>
    <script type="text/javascript">
    Sys.require([Sys.scripts.jQuery, Sys.components.ApplicationServices], function () {
    $('form#profile').bind('submit', SaveProfileWithAjax);
    });

    function SaveProfileWithAjax(event){
    event.preventDefault();
    // Post the data using an AJAX call
    }
    </script>


    3 脚本延迟加载
    <script src="../Scripts/MicrosoftAjax/start.js" type="text/javascript"></script>
    <script src="../Scripts/RegisterAppScripts.js" type="text/javascript"></script>

    <script type="text/javascript">
    function SpellCheck() {
    Sys.require([Sys.scripts.Spelling, Sys.scripts.Grammar], function () {
    // Use the scripts to check spelling & grammar
    }); }
    </script>

    <input type="button" onclick="SpellCheck()" value="Check Spelling & Grammar"/>

    Sys.loader.defineScripts({
    releaseUrl: "%/../Scripts/{0}.js",
    debugUrl: "%/../Scripts/{0}.debug.js"
    },
    [
    { name: "Spelling",
    executionDependencies: ["ApplicationServices"],
    isLoaded: !!(window.MyApp && MyApp.Spelling)
    }

    { name: "Grammar",
    executionDependencies: ["ApplicationServices", "jQuery"],
    isLoaded: !!(window.MyApp && MyApp.Grammar)
    }
    ]
    );


    4 脚本依赖管理,使用Sys.loader
    (function() {
    function execute() {
    // Put the script content here
    }

    if (window.Sys && Sys.loader) {
    Sys.loader.registerScript("myScriptName", null, execute);
    }
    else {
    execute();
    }
    })();


    5 调试
    Sys.debug = true;
    默认为false


    6 一些原则
    (1) 必要的时候才使用ViewState

    (2) 没必要不使用服务端控件

    (3) 设置ScriptManager的LoadScriptsBeforeUI属性为False

    (4) 在客户端可以使用JavaScript完成的操作,避免跟服务端往返交互

    (5) 合并和压缩客户端脚本

    (6) 如果可能的话使用ScriptService或者页面方法与UpdatePanel通信

    (7) UpdatePanel里的内容尽量少

    (8) 当使用自定义验证器时使用UpdatePanel


    7 创建新模块
    (1) 作为服务模块创建,实现IServicesSupplier接口
    using Microsoft.Practices.Web.Modularity;

    public class MyModuleServicesSupplier : IServicesSupplier
    {
    private readonly IUnityContainer container;

    public MyModuleServicesSupplier (IUnityContainer container)
    {
    this.container = container;
    }

    public void ProfferServices()
    {
    this.container.RegisterType<IFormsAuthenticationService, FormsAuthenticationService>(
    new ContainerControlledLifetimeManager());
    this.container.RegisterType<IMembershipService, AccountMembershipService>();
    }
    }
    我们也可以使用Castle的容器

    (2) 作为路由模块创建,实现IRoutesSupplier接口
    using Microsoft.Practices.Web.Modularity;

    public class MyLibraryRoutesSupplier : IRoutesSupplier
    {
    public void RegisterRoutes(RouteCollection routeCollection)
    {
    var context = new AreaRegistrationContext("MyLibrary", routeCollection);
    context.MapRoute("MyLibrary_default", "Library/{action}/{id}",
    new { controller = "Library", action = "Index", id = "" });
    }
    }

    (3) 作为初始化模块,实现IInitializable接口
    using Microsoft.Practices.Web.Modularity;

    public class ValidationAdapterInitializer : IInitializable
    {
    public void Initialize()
    {
    this.RegisterAdapterForDataAnnotationsModelValidatorProvider(
    typeof(ClientSideRemoteValidationAttribute), typeof(ClientSideRemoteValidator));
    this.RegisterAdapterForDataAnnotationsModelValidatorProvider(
    typeof(EqualsFieldValidationAttribute), typeof(EqualsFieldValidator));
    this.RegisterAdapterForDataAnnotationsModelValidatorProvider(
    typeof(PasswordStrengthAttribute), typeof(PasswordStrengthValidator));
    }

    protected virtual void RegisterAdapterForDataAnnotationsModelValidatorProvider(
    Type validationAttribute, Type validator)
    {
    DataAnnotationsModelValidatorProvider.RegisterAdapter(validationAttribute, validator);
    }
    }

    作者:Lucifer Xue
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    PHP+MySQL实现海量数据导入导出的总结:is_numbric函数的坑
    【PHP开发规范】继承与扩展:PSR-2 编码风格规范
    【PHP开发规范】老生常谈的编码开发规范你懂多少?
    【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序
    php数组函数array_column:不用循环就能提取多维数组内容
    php使用urlencode对中文编码而引出的问题:urlencode和rawurlencode的区别
    table-tree vs stock vs whiteboard
    PDF解析
    山灵up4
    Devops之CI/CD
  • 原文地址:https://www.cnblogs.com/SevenXue/p/1865927.html
Copyright © 2020-2023  润新知