zoukankan      html  css  js  c++  java
  • ASP.NET 开发知识小结

    做了几年的ASP.NET,积累了不少小技巧。但是技巧只适合于特定的环境,还不如加强对基础知识的理解与运用。下面是我的一点体会,与大家分享。

    1 母版页
    这个控件可以使我忘记html的iframe之类的页面框架方案,还有frameset.
    asp开发中还支持<#include file=”head.asp>
    现在有母版页可以轻松的以.NET的方式来进行编写页面。
    1)  在母版页对应的内容页中,查找母版页中的控件 ,并给它赋值
    MasterPage.FindControl(“lblTitle”)=”New Request”
    2) 母版页中使用JavaScript,取到文本控件的值,验证它是否合法
    ’<=txtUserName.ClientID>’

    2 User Control 不常用,但是有时候会用到。比如,为了统一不同用户的页面地址,把不同角色的页面放到User Control中,而在同一个页面中,根据当前登陆的用户判断,加载不同的User Control
    新建立二个文件,PM.ascx, GM.ascx分别对应于角色是PM和GM时的页面,在页面中作如下判断
    UserControl uc
    swith(role)

    {
    case “PM”
       uc=(UserControl) LoadControl(“~/PM.ascx”); break;
    case ‘GM” 
       uc=(UserControl) LoadControl(“~/GM.ascx”); break;
    }
    placeHolder.Controls.Add(uc);
    placeHolder是在页面上放置的一个PlaceHolder控件。


    3  数据源控件 用法举例
    把数据库的字段绑定到DropDownList 控件中
    <asp:DropDownList ID="ddlEndCustomer" runat="server" Width="130" DataTextField="ShortName"
          DataValueField="ShortName" DataSourceID="sqlEndCustomer">
          </asp:DropDownList>
          <asp:SqlDataSource ID="sqlEndCustomer" runat="server" ConnectionString="<%$ ConnectionStrings:HTSystemConnectionString %>"
           SelectCommand="SELECT LTRIM(RTRIM([ShortName]))  [ShortName] FROM [Customer] "> </asp:SqlDataSource>

    再来一个XmlDataSource
    <asp:DropDownList ID="ddlPartResin" runat="server" Width="130" DataSourceID="xmlLedgerAcc"  DataTextField="Text" DataValueField="Value">
                   </asp:DropDownList>
    <asp:XmlDataSource ID="xmlLedgerAcc" DataFile="~/App_Data/PartResin.xml" runat="server"     XPath="Items/Item"></asp:XmlDataSource>
    Xml文件格式如下
    <?xml version="1.0" encoding="utf-8" ?>
    <Items>
      <Item Text="ABS" Value="ABS"></Item>
      <Item Text="HIPS" Value="HIPS"></Item>
      <Item Text="PA" Value="PA"></Item>
    </Items>

    对于ObjectDataSource,用的不熟练,没有在项目开发中使用。SqlDataSource 也很少直接用于GridView的数据绑定,数据库中的数据,通常需要转换一下,用这个控件还要重新写代码,还不如直接写代码来的方便。
    举例,数据库中有一个字段,smallint类型,1表示男,0表示女。用程序判断一下才可以绑定到控件中去。SQL写法如下
    SELECT Sex=CASE WHEN Sex=1 THEN ‘Man’
                                 WHEN Sex=0 THEN ‘Woman’
                   END
    FROM Employee

    4  资源文件
    通常要放置一些提示字符串,比如“操作成功”,“新增业务订单失败”之类的,分散在各个类中,不好管理,也不容易统一风格。用资源文件可以有效的解决这个问题
    新建2个文件,Strings.aspx.en-us.resx,Strings.aspx.resx
    在文件里面写明字符串资源的值的键,在页面的后台代码中调用
    Bitmap img = (System.Drawing.Bitmap)GetGlobalResourceObject(
               "MyGlobal", CultureInfo.CurrentCulture.Name);
    (string)GetGlobalResourceObject("MyGlobal", "GlobalText"); 
    (string)GetLocalResourceObject("lbl.Text");
    如代码所示,可以从全局的资源文件或局部资源文件中取出相应的资源,可以是字符串,也可以是图片

    5 验证控件
    <asp:TextBox ID="txtUserName" runat="server" />
      <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="RequiredFieldValidator"  Display="None"         ControlToValidate="txtUserName"></asp:RequiredFieldValidator>
    验证用户名是必须输入的,否则不允许提交
    如果你用了验证控件,页面上的按钮的默认属性CausesValidation=true,每一个按钮是会触发验证的。
    上周帮忙同事看一个问题,如下图
     image

    这是选择用户的页面,点击>按钮把员工添加到右边的ListBox中去。
    我的同事拷贝我的代码过去,点击>按钮,页面事件没有任何反应,debugger也不能中断。
    我仔细检查他的页面代码,发现他使用了ASP.NET的验证控件,验证控件本身不显示错误提示,如代码所示Display="None"   ,把所有的验证提示放到ValidationSummary,偏偏他的代码中又没有拷贝这个控件,所以怎么也找不到问题。我告诉他把>按钮的CausesValidation设为false,按钮开始正常工作。

    6  Themes用的不多,不如在CSS文件中设置方便。 
    Membership虽然是可扩展的,可是MS做了那么多存储过程,关系复杂,自己很少用。
    我有见过在Win Forms应用程序中,应用aspnetdb作为用户验证数据库,自己在Web开发都没有用到,居然有人在Win Forms中应用,可见它还是具有典型的意义。aspnetdb还提供了一个管理工具,可以直接添加用户,添加角色,这可以快速搭建一个角色权限数据库,验证系统用户。
    Security通常是Form验证。我们公司内部局域网以域方式管理,相互信任的关系,改选用Windows验证方式,用每个电脑的Login ID作主用户名标识,当发现数据库中不存在该用户时,调出引导注册页面,让用户注册,然后管理员审核一下他的角色,赋予相应的权限就可以。

    Profile也很少用,估计这东东和Portal Framework关系密切,几乎没有用。
    有用户提到过一个需求,为每个输入窗体配置一些默认值,方便他快速的输入数据。因为角色是几乎不变的,要输入的数据,通常就那几个类别,我弄成DropDownList 供他选择,还不够方便,最好直接帮忙他选择一个默认值,这个默认值在80%的情况下是正确的。
    估计这个功能用Profile来做会比较轻松,在新版本中考虑用这个特性来做。

    6 Cache
    在ASP.NET 1.1时代做过一个方案,要做一个多语言的ASP.NET应程序,把语言放置到Xml中,写成zh-cn.xml,en-us.xml,zh-tw.xml,然后在界面中读取这个文件,给界面元素赋值。
    当是没有用缓存,有高人提示,这个文件的内容几乎不会变化,应该主动用文件依赖缓存,加快读取速度。
    还有个争持,是用HttpContext.Cahce,还是用HttpRuntime.Cache,页面的Cache肯定是最糟糕的方案。那时我笨,也没有分清楚这两个的关系。现在你应该知道是用拿一个,否则要查一个MSDN。
    上一段代码,练下手
    if (Cache["key"] == null)
           {
           Cache.Insert("key", DateTime.Now, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);
           }
    DateTime dt = (DateTime)Cache["key"];
    缓存的使用模式是要先判断是否存在,不存在要刷新缓存,否则直接取值
    if(Cache[“Name”]==null)
       Cache.Insert("Name", DateTime.Now, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);
    txtUserName.Text=Convert.ToString(Cache[“Name”]);
    当有大量的缓存键值对时,最好也做个CacheManager,统一管理键值对,减少出错。

  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/1661294.html
Copyright © 2011-2022 走看看