岩's profile混京城PhotosBlogLists Tools Help

混京城

常在京城混,咋就不生财?
February 23

最简单的方法,让 ASP.NET Menu 控件在 Google Chrome 浏览器上正常显示

这天心情不错,下载了Google Chrome 浏览器,用它浏览了一下自己做的网页,菜单显示的一塌糊涂。

网上找了一些文章,基本上都是用CssFriendly来解决的,感觉总是不太完美,看到了CssFriendly是在.browser文件里进行配置,忽然间想到研究一下.browser文件。

终于想到方法,在.browser文件里把 Google 浏览器表示出来,问题就可以解决了。

方法很简单,在ASP.NET网站项目中添加Others.browser内容如下,这样菜单在Safari3和Google浏览器下就都可以正常显示了

<browsers>
 <browser id="Safari3" parentID="Safari1Plus">
  <identification>
   <userAgent match="Safari/\d+\.\d+" />
  </identification>
  <capture>
   <userAgent match="Version/(?'version'\d+\.\d+)" />
  </capture>
  <capabilities>
   <capability name="browser" value="Safari3" />
   <capability name="version" value="${version}" />
  </capabilities>
  <controlAdapters>
   <adapter controlType="System.Web.UI.WebControls.Menu"
      adapterType="" />
  </controlAdapters>
 </browser>
 <browser id="GoogleChrome" parentID="Safari3">
  <identification>
   <userAgent match="Chrome/(?'version'\d+\.\d+)" />
  </identification>
  <capabilities>
   <capability name="browser" value="Googlebot" />
  </capabilities>
 </browser>
</browsers>

 

January 11

在多种浏览器下获取Javascript中的事件对象

// 在多种浏览器下获取Javascript中的事件对象
function getEvent()
{
    var e = window.event;
    if (e) return e;
    for (var func = getEvent; typeof func != "undefined" && func; func = func.caller)
        if (func.arguments.length > 0 && (e = func.arguments[0]) && (e.constructor == Event || e.constructor == MouseEvent))
            return e;
    return null;
}
// 添加事件处理
function addEvent(elm, type, handler)
{
    type = type.toLowerCase();
    if (type.length > 2 && type.substring(0, 2) == "on")
        type = type.substring(2, type.length-2);
    if (elm.addEventListener)
        elm.addEventListener(type, handler, false);
    else if (elm.attachEvent)
        elm.attachEvent("on" + type, handler);
    else
    {
        var func = new function(e){
            if (typeof(this.previousHandler) != "undefined" && this.previousHandler)
                this.previousHandler(e);
            this.currentHandler(e);
        };
        func.previousHandler = eval("elm.on" + type);
        func.currentHandler = handler;
        eval("elm.on" + type + " = func;");
    }
}
October 24

在 SQL Server 中生成自增序列号

这里使用的是行锁定的排他锁,执行带有“WITH (ROWLOCK, XLOCK) ”的SELECT语句后会将这条记录锁定,其它线程对该记录的插入或修改操作都会被延迟到存储过程结束;如果在锁定后进行了插入或修改操作,之后的所有对该行的操作(包括查询)都被延迟到存储过程结束。
注:为了支持更大的数据量,使用了BIGINT数据类型。

如发现缺陷请留言指教,代码如下:

-- 创建表
CREATE TABLE [dbo].[SerialNumber](
[Name] [nvarchar](256) NOT NULL PRIMARY KEY,
[Next] [bigint] NOT NULL);
GO

-- 创建存储过程
CREATE PROCEDURE [dbo].[GenerateSerialNumber](@Name nvarchar(256), @Next BIGINT OUT)
AS
BEGIN
  BEGIN TRAN GenerateSerialNumber
    IF NOT EXISTS(SELECT * FROM SerialNumber WITH (ROWLOCK, XLOCK) WHERE [Name]=@Name)
      INSERT INTO SerialNumber ([Name], [Next]) VALUES(@Name, 0);
    SELECT @Next=[Next] FROM SerialNumber WHERE [Name]=@Name;
    UPDATE SerialNumber SET [Next]=[Next]+1;
  COMMIT TRAN GenerateSerialNumber
  RETURN @Next;
END
GO

--调用
DECLARE @Next bigint;
EXEC [dbo].[GenerateSerialNumber] @Name = N'SalesOrder', @Next = @Next OUTPUT;
SELECT @Next as [Next];
GO

March 25

电话,手机

回家路上, 一对脚印引起了我的注意, 正在苦思其来历, 一40来岁猛男以迅雷不及掩耳盗铃之势, 三步并作两, 走到这两个脚印上, 摆出一超酷的姿势, 虽一把年纪, 却魅力不减当年金戈铁马, 还玩行为艺, 继续看, 口中还念念有词不达意: "电话卖吗? 手机卖吗?"。
狂FAINT!
January 12

Menu 的权限控制

之前用过 ASP.NET 2.0 的菜单,只是用作普通显示,这两天晚上对菜单的权限研究了一下,如果使用了集成的Membership等组件,菜单的权限控制真是...那个词叫什么来着?好像是叫唾手可得吧。
.NET 2.0 的新功能中有一个组件叫做站点地图(Sitemap),它默认通过读取站点地图文件(XML)来获取地图数据;而菜单可以与站点地图之间实现绑定。
首先,在Web.config中配置好站点地图的提供程序,代码如下:
<system.web>
  <siteMap defaultProvider="XmlSiteMapProvider">
   <providers>
    <clear />
    <add siteMapFile="web.sitemap" name="XmlSiteMapProvider"
                    type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
     securityTrimmingEnabled="true"
     />
   </providers>
  </siteMap>
</system.web>
红色那个属性,就是启用权限控制,称为“安全修整”。
然后,在Sitemap文件中对各菜单项进行配置,设置sitemapNode节的roles属性,加入允许的角色,用逗号分隔。如果所有用户都可以访问,设置为“*”。
再在控件中加入权限控制,那所有的工作基本就完成了。
 
不要惊讶,就是这么简单。
 
注意:如果父节点的链接不为空,则这个节点对应的菜单项始终可见。
 
 

岩 闫

Occupation
Location
手机  
Photo 1 of 19
More albums (1)