现在的位置: 首页 > 综合 > 正文

为什么LinkButton不起作用了,AD中的用户也找不到了

2012年01月18日 ⁄ 综合 ⁄ 共 1855字 ⁄ 字号 评论关闭
      这一周都在修Defect,修的晕头转向,今天遇到两个小问题,虽然很小但是很烦人,把这么一点实战经验分享给大家看看。

l        
首先说LinkButton为什么失效了
    由于页面比较复杂,使用了一些Validator 控件,这是在客户端验证的控件,当有错误的时候就首先显示这个错误。但是这个ValidatorLinkButton有什么关系呢?察看运行页面的HTML代码,发现生成了一段JavaScript,需要验证通过才可以进行。{if (typeof(Page_ClientValidate) != 'function' ||  Page_ClientValidate()) __doPostBack('LinkButton1','')} 可是我没有加收工写过这些代码,后来发现LinkButton有个属性LinkButton.CausesValidation,获取或设置一个值,该值指示在单击 LinkButton 控件时是否执行验证,呵呵,很简单,把它设置为False就可以了。

 

l         再说说AD中为什么找不到用户了
先前,为了查找一个用户,用如下的代码,然后在其他调用的地方判断这个SearchResult是否为空:

private SearchResult GetSearchResultByUserID(string UserID)
    
{
        System.DirectoryServices.DirectoryEntry AppNode 
= new DirectoryEntry(ServerName+"/"+OuName+","+DomainName,UserName,Password);
        DirectorySearcher Ds 
= new DirectorySearcher(AppNode);
        Ds.Filter 
= "(&(objectClass=user)(cn=" + UserID + "))";

        SearchResult result 
= Ds.FindOne();
        
return result;
    }

    今天作了这样的一个用户管理的目录结构,如图:

    (原来的用户都是在User Directory根目录下的)那么此时用户就找不到了,因为FindOne方法不会递归目录去查找,只是在当前的目录进行查找。后来没有办法,只好把它改成了FindAll,然后再对比每个节点的用户名是否相同。

private SearchResult GetSearchResultByUserID(string UserID)
        
{
            DirectoryEntry rootentry 
= new DirectoryEntry(ServerName+"/"+DomainName,UserName,Password);
            DirectorySearcher ds 
= new DirectorySearcher(rootentry);
            ds.Filter 
= ("(objectClass=user)");
            rootentry.RefreshCache();
            SearchResultCollection src 
= ds.FindAll();
            
foreach(SearchResult sr in src)
            
{
                System.DirectoryServices.DirectoryEntry mUser 
= new System.DirectoryServices.DirectoryEntry(sr.GetDirectoryEntry().Path,UserName,Password);
                
if(string.Compare(mUser.Properties["sAMAccountName"].Value.ToString(), UserID, true== 0)
                
{
                    
return sr;
                }

            }

            
return null;
        }

抱歉!评论已关闭.