使用angularjs $ http从服务器

时间:2016-12-11 13:27:49

标签: angularjs asp.net-mvc entity-framework

我正在开发一个asp.net mvc应用程序,我正在使用Entity Framework和AngularJS。我正在使用AngularJS的$http服务来调用操作方法并从服务器检索数据。从服务器检索到正确的数据(我通过调试确认了这一点),但是在action方法返回检索到的数据并且触发错误回调函数而不是成功回调函数之后,会发生错误。然后我在浏览器的控制台中获得状态500。

以下是涉及的代码块:

(来自angularjs控制器)

    $http({
        url: rootUrl + "User/GetUser",//'@Url.Action("GetUser","User")',
        method: 'POST',
        params: {
            uname: $scope.username,
            pword: $scope.pass
        }
    }).then(function (response) {
        alert('success!');
        $scope.user = response.data;
        if ($scope.user.Fullname != undefined) {
            $http({
                url: rootUrl + "Session/Set",
                method: "POST",
                data: {
                    "key": "curr_user",
                    "value": JSON.stringify($scope.user)
                }
            });

            window.location.href = rootUrl + 'Product/List/';

        } else {
            //invalid login
            $("input[name='password']").select();
            $("#validation-summary").html("Wrong email or password.");
            $scope.invalidlogin = true;
            $(btnLogin).removeClass('disabled');
            $(btnLogin).text("Submit");

        }

(来自mvc控制器)

    [HttpPost]
    public JsonResult GetUser(string uname, string pword)
    {
        JBManager manager = null;

        using (SE_Context db = new SE_Context())
        {
            try
            {
                manager = db.Managers
                    .Include("Transactions.Items")
                    .Where(m => m.Username == uname && m.Password == pword)
                    .FirstOrDefault();
                //At this point, manager has the desired data
                return Json(manager, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }

这是浏览器中错误的屏幕截图: enter image description here

非常感谢任何帮助。谢谢!

更新: 在使用Entity Framework之前,一切正常。 (以防万一与问题有关)

1 个答案:

答案 0 :(得分:0)

我认为您的问题是嵌套对象。您可以使用DTO(数据传输对象)展平包含嵌套对象的对象图。

您可以尝试下面的简单示例。如果它可以工作,那么您需要扩展它以使用您的EF查询。

public class MyDto
    {
        public string Name { get; set; }
    }


    [HttpPost]
    public JsonResult GetUser(string uname, string pword)
    {
        JBManager manager = null;

        using (SE_Context db = new SE_Context())
        {
            try
            {
               //construct the DTO here
                manager = db.Managers.Select(a=> new MyDto(
                {
                 Name = a.Name
                 })).FirstOrDefault(m => m.Username == uname && m.Password == pword);

                return Json(manager, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }

您可以在此处详细了解DTO:Create Data Transfer Objects (DTOs)