将配置文件信息与 ASP.NET AJAX 一起使用
更新:2007 年 11 月
ASP.NET 配置文件 Web 服务使您能够在 应用程序中使用 ASP.NET 配置文件应用程序服务。本主题演示如何使用 ECMAScript (JavaScript) 代码从浏览器调用应用程序配置文件服务。
使用配置文件信息需要先在网站中启用配置文件服务。这样使其可用作 Web 服务。当启用配置文件 Web 服务时,可通过调用客户端脚本 Sys.Services.ProfileService 类的方法调用它。
启用配置文件服务
若要从脚本使用配置文件服务,必须通过使用应用程序的 Web.config 文件中的下列元素来启用配置文件服务。
<system.web.extensions>
<scripting>
<webServices
< profileService enabled="true" />
</webServices
</scripting>
</system.web.extensions>
默认情况下,没有可用的配置文件属性。对于希望在客户端应用程序中可用的每个配置文件属性 (Property),将属性 (Property) 名称添加到 profileService 元素的 readAccessProperties 属性 (Attribute)。类似地,对于可基于从客户端应用程序发送的数据设置的每个服务器配置文件属性 (Property),将属性 (Property) 名称添加到 writeAccessProperties 属性 (Attribute)。下面的示例演示如何公开各个属性并设置客户端应用程序是否可以读取和写入这些属性。
<profileService enabled="true"
readAccessProperties="Backgroundcolor,Foregroundcolor"
writeAccessProperties=" Backgroundcolor,Foregroundcolor"/>
通过使用类似于以下示例中的语法,在 profile 节中定义配置文件属性。对于分组的属性,请使用 group 元素。
<system.web>
<profile enabled="true">
<add name=" Backgroundcolor" type="System.String"
defaultValue="white" />
<add name=" Foregroundcolor" type="System.String"
defaultValue="black" />
<properties>
<group name="Address">
<add name="Street" type="System.String" />
<add name="City" type="System.String"/>
<add name="PostalCode" type="System.String" />
</group>
</properties>
</profile>
</system.web>
有关更多信息,请参见 如何:在 ASP.NET AJAX 中配置 ASP.NET 服务。
示例
下面的示例演示如何从客户端脚本使用配置文件服务。此示例由包含 ScriptManager 控件的 ASP.NET 网页组成。当页中包含此控件时,Sys.Services.AuthenticationService 对象将自动对此页中的任何客户端脚本可用。
此页包含一个登录按钮和名为 OnClickLogin 的关联的事件处理程序。方法中的代码将调用 AuthenticationService 对象的 login 方法。
登录后,将调用 loginComplete 回调函数,此函数会调用 Sys.Services.ProfileService 对象的 load 方法以加载当前用户的配置文件。
配置文件信息包含登录后可设置的背景色和前景色。背景色和前景色是必须在 Web.config 文件中设置的配置文件属性。若要定义这些属性,请向应用程序的 Web.config 文件添加以下元素:
<profile enabled="true">
<properties>
<add name="Backgroundcolor" type="System.String"
defaultValue="white"/>
<add name="Foregroundcolor" type="System.String"
defaultValue="black"/>
</properties>
</profile>
示例代码为加载和保存方法提供异步完成的回调函数。也可以为加载和保存方法添加失败的回调函数。
说明: |
---|
运行此示例之前,请确保应用程序的成员资格数据库中至少定义了一个用户。有关如何在默认的 SQL Server Express Edition 数据库中创建用户的信息,请参见将 Forms 身份验证用于 ASP.NET AJAX。 |
var setProfileProps;
function pageLoad()
{
var userLoggedIn =
Sys.Services.AuthenticationService.get_isLoggedIn();
// alert(userLoggedIn);
profProperties = $get("setProfileProps");
passwordEntry = $get("PwdId");
if (userLoggedIn == true)
{
LoadProfile();
GetElementById("setProfProps").style.visibility = "visible";
GetElementById("logoutId").style.visibility = "visible";
}
else
{
DisplayInformation("User is not authenticated.");
}
}
// The OnClickLogout function is called when
// the user clicks the Logout button.
// It logs out the current authenticated user.
function OnClickLogout()
{
Sys.Services.AuthenticationService.logout(
null, OnLogoutComplete, AuthenticationFailedCallback,null);
}
function OnLogoutComplete(result,
userContext, methodName)
{
// Code that performs logout
// housekeeping goes here.
}
// This is the callback function called
// if the authentication failed.
function AuthenticationFailedCallback(error_object,
userContext, methodName)
{
DisplayInformation("Authentication failed with this error: " +
error_object.get_message());
}
// Loads the profile of the current
// authenticated user.
function LoadProfile()
{
Sys.Services.ProfileService.load(null,
LoadCompletedCallback, ProfileFailedCallback, null);
}
// Saves the new profile
// information entered by the user.
function SaveProfile()
{
// Set background color.
Sys.Services.ProfileService.properties.Backgroundcolor =
GetElementById("bgcolor").value;
// Set foreground color.
Sys.Services.ProfileService.properties.Foregroundcolor =
GetElementById("fgcolor").value;
// Save profile information.
Sys.Services.ProfileService.save(null,
SaveCompletedCallback, ProfileFailedCallback, null);
}
// Reads the profile information and displays it.
function LoadCompletedCallback(numProperties, userContext, methodName)
{
document.bgColor =
Sys.Services.ProfileService.properties.Backgroundcolor;
document.fgColor =
Sys.Services.ProfileService.properties.Foregroundcolor;
}
// This is the callback function called
// if the profile was saved successfully.
function SaveCompletedCallback(numProperties, userContext, methodName)
{
LoadProfile();
// Hide the area that contains
// the controls to set the profile properties.
SetProfileControlsVisibility("hidden");
}
// This is the callback function called
// if the profile load or save operations failed.
function ProfileFailedCallback(error_object, userContext, methodName)
{
alert("Profile service failed with message: " +
error_object.get_message());
}
// Utility functions.
// This function sets the visibilty for the
// area containing the page elements for settings
// profiles.
function SetProfileControlsVisibility(currentVisibility)
{
profProperties.style.visibility = currentVisibility;
}
// Utility function to display user's information.
function DisplayInformation(text)
{
document.getElementById('placeHolder').innerHTML +=
"<br/>"+ text;
}
function GetElementById(elementId)
{
var element = document.getElementById(elementId);
return element;
}
if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
<%@ Page Language="VB" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Using Profile Service</title>
<style type="text/css">
body { font: 11pt Trebuchet MS;
padding-top: 72px;
text-align: center }
.text { font: 8pt Trebuchet MS }
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="ScriptManagerId">
<Scripts>
<asp:ScriptReference Path="Profile.js" />
</Scripts>
</asp:ScriptManager>
<h2>Profile Service</h2>
<p>
You must log in first to set or get profile data.
Create a new user, if needed. <br /> Refer to the Authentication example.
</p>
<div id="loginId" style="visibility:visible">
<table id="loginForm">
<tr>
<td>User Name: </td>
<td><input type="text"
id="userId" name="userId" value=""/></td>
</tr>
<tr>
<td>Password: </td>
<td><input type="password"
id="userPwd" name="userPwd" value="" /></td>
</tr>
<tr>
<td><input type="button"
id="login" name="login" value="Login"
onclick="OnClickLogin()" /></td>
</tr>
</table>
</div>
<div id="setProfProps" style="visibility:hidden">
<input type="button"
value="Set Profile Properties"
onclick="SetProfileControlsVisibility('visible')"/>
</div>
<div id="placeHolder" style="visibility:visible" />
<br />
<input id="logoutId" type="button"
value="Logout" style="visibility:hidden"
onclick="OnClickLogout()" />
<div id="setProfileProps" style="visibility:hidden">
<table>
<tr>
<td>Foreground Color</td>
<td><input type="text" id="fgcolor"
name="fgcolor" value=""/></td>
</tr>
<tr>
<td>Background Color</td>
<td><input type="text" id="bgcolor"
name="bgcolor" value="" /></td>
</tr>
<tr>
<td><input type="button"
id="saveProf" name="saveProf"
value="Save Profile Properties"
onclick="SaveProfile();" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Using Profile Service</title>
<style type="text/css">
body { font: 11pt Trebuchet MS;
padding-top: 72px;
text-align: center }
.text { font: 8pt Trebuchet MS }
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="ScriptManagerId">
<Scripts>
<asp:ScriptReference Path="Profile.js" />
</Scripts>
</asp:ScriptManager>
<h2>Profile Service</h2>
<p>
You must log in first to set or get profile data.
Create a new user, if needed. <br />
</p>
<div id="setProfProps" style="visibility:visible">
<input type="button"
value="Set Profile Properties"
onclick="SetProfileControlsVisibility('visible')"/>
</div>
<div id="placeHolder" style="visibility:visible" />
<br />
<input id="logoutId" type="button"
value="Logout" style="visibility:hidden"
onclick="OnClickLogout()" />
<div id="setProfileProps" style="visibility:hidden">
<table>
<tr>
<td>Foreground Color</td>
<td><input type="text" id="fgcolor"
name="fgcolor" value=""/></td>
</tr>
<tr>
<td>Background Color</td>
<td><input type="text" id="bgcolor"
name="bgcolor" value="" /></td>
</tr>
<tr>
<td><input type="button"
id="saveProf" name="saveProf"
value="Save Profile Properties"
onclick="SaveProfile();" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>
请参见
任务
如何:在 ASP.NET AJAX 中配置 ASP.NET 服务