我相对较新的ASP.NET(目前在大学学习),我对C#有很好的了解。
问题:
我有一个MSQL数据库和一个处理SQL请求的DatabaseConnection类。从数据库中获取数据后,我将其存储在3个类中 - Person,Project,Task,其中Person类包含用户信息(角色,名称等)和2个列表 - List和List。
当用户登录Person对象时,在Code Behind中创建了来自数据库的所有相关信息。如果我刷新/移动到另一个年龄,则会重新创建这些对象。
public partial class _Default : System.Web.UI.Page
{
private Person user;
protected void Page_Load(object sender, EventArgs e)
{
user = new Person(User.Identity.Name.ToString());
}
//other methods
}
第1个问题:是否有可能以某种方式避免重新创建Person对象(保留它而不将其存储在客户端上)?
继续:我现在想从这些类中获取数据并使用AJAX / JQUERY显示它。
我创建了一个AJAX服务,其中包含一个获取用户项目计数的方法。我设法做到的唯一方法是将用户名从HTTPContext传递给服务 - 创建一个新的person对象并从那里提取我想要避免的信息。
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class AjaxService
{
[OperationContract]
public string UserProjectCount(String email)
{
Person user = new Person(email);
String projectCount = user.getProjectsCount() + "";
return projectCount;
}
}
我从Default.aspx页面调用此方法:
<script type="text/javascript">
function pageLoad() {
var username = '<%=HttpContext.Current.User.Identity.Name %>';
AjaxService.UserProjectCount(username, OnComplete, OnError);
}
function OnComplete(result) {
var projCount = "" + result;
$get("myProjects").innerText = " (" + projCount + ")";
}
function OnError(errorMessage) {
alert(errorMessage.get_message());
}
</script>
第二个问题:是否可以从WCF服务中访问当前包含在CodeBehind页面中的已创建的Person对象,而不是创建一个新对象?
第三:我可以/我应该创建一个包含所有这些数据对象的服务吗?
我一直试图将上述内容计算超过一周,而且我越来越困惑了。 Ant帮助将受到高度赞赏!
谢谢。
答案 0 :(得分:1)
是否有可能以某种方式避免重现Person对象 (保留它而不将其存储在客户端上)?
是的,ASP.NET caching。
是否可以访问已创建的Person对象 它目前包含在CodeBehind页面中 WCF服务而不是创建新服务?
是的,可以在服务中使用缓存对象。
我可以/我应该创建一个包含所有这些数据对象的服务吗?
您可以创建一个返回和操作对象的Service Layer。这可以由Web服务包装 - WCF或Restful服务。
如果要存储在内存中的对象(而不仅仅是光盘)特定于用户的会话,请查看ASP.NET Session。