如何在silverlight中以同步方式 获取sharepoint2013站点的当前登录账号

最近有个项目用到了silverlight要同步方式获取当前登录账号。异步的方式无法跟其他应用结合。主要先后顺序问题。但是silverlight非常不好获取到当前登录账号。即使获取到了也是异步方式获取。后来想到用JS的客户端对象模型区获取也是异步方式可以获取。代码如下:

<script type="text/javascript">

SP.SOD.executeFunc('sp.js', 'SP.ClientContext', getWebUserData);

var context = null;

var web = null;

var currentUser = null;

function getWebUserData() {

context =SP.ClientContext.get_current();

web = context.get_web();

currentUser = web.get_currentUser();

currentUser.retrieve();

context.load(web);

context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));

}

function onSuccessMethod(sender, args) {

var userObject = web.get_currentUser();

alert('User name:' + userObject.get_title() + '\n Login Name:' + userObject.get_loginName());

document.getElementById("sl_slCurrentLoginName").value =userObject.get_title();

alert(document.getElementById("sl_slCurrentLoginName").value);

}

function onFailureMethod(sender, args) {

alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());

}

</script>

 

也是无法控制与其他应用的先后顺序,网上有资料写了通过web services来无法获取,不成功。其实想明白了很简单,下面是解决方案:

1、 自己开发一个用户控件,在用户控件里用API函数获取当前登录账号并赋值给隐藏的控件,如下:

用户控件的.ascx的代码如下:

<input type="hidden" id="sl_slCurrentLoginName" value="<%=_currentLoginName%>" />

注意:id要在唯一。不能在母版页和布局页里有重复的,而且为客户端的控件

用控件.CS代码如下:

定义全局变量:

/// <summary>


/// currentlogin


/// </summary>


public string _currentLoginName = string.Empty;

page_load事件:

protected void Page_Load(object sender, EventArgs e)


{


 
try


{


//


SPUser user = SPContext.Current.Web.CurrentUser;


//


if(user !=null)


{


_currentLoginName =SSOCredentials.GetLoginName(user.LoginName);


}


}


catch(Exception ex)


{


}


}



2、 把用户控件部署到SP站点中

3、 把用户控件部署到母版页或布局页(通过SPD方式加入进去或VS里头部署母版的方式嵌入进去,这里不多说了)。这里我部署到母版页,如下图:

image

4、 部署完毕后,在silverlight代码端用如下一个函数就可以搞定。

string loginName = HtmlPage.Document.GetElementById("sl_slCurrentLoginName").GetAttribute("value");

部署完毕silverlight包到SP站点中,即可获取当前登录账号。

你可能感兴趣的:(silverlight)