如何从AJAX服务访问代码隐藏?

时间:2013-11-28 12:20:25

标签: c# asp.net ajax wcf

我相对较新的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帮助将受到高度赞赏!

谢谢。

1 个答案:

答案 0 :(得分:1)

  

是否有可能以某种方式避免重现Person对象   (保留它而不将其存储在客户端上)?

是的,ASP.NET caching

  

是否可以访问已创建的Person对象   它目前包含在CodeBehind页面中   WCF服务而不是创建新服务?

是的,可以在服务中使用缓存对象。

  

我可以/我应该创建一个包含所有这些数据对象的服务吗?

您可以创建一个返回和操作对象的Service Layer。这可以由Web服务包装 - WCF或Restful服务。

如果要存储在内存中的对象(而不仅仅是光盘)特定于用户的会话,请查看ASP.NET Session