簡體   English   中英

angularjs使用多個數組以json格式將數據發布到mvc控制器

[英]angularjs post data to mvc controller in json format with multiple arrays

我正在一個使用angularjs和mvc的項目中,我正在通過$ http.post()將數據從angular js控制器傳遞到我的mvc控制器。現在我正在使用單個對象/ json數組來檢索這樣的數據-public bool UpdateIssueDetails(IssueBO問題)。但是我希望如果我能像這個公共public bool UpdateIssueDetails(IssueBO問題,列表lstMembersToNotify)一樣。我想從ny angular js控制器向我上面的mvc控制器方法發送兩個json數組。

angularjs控制器代碼

 $scope.saveIssueDetails = function (issue) {
    var milestoneId = "";
    var milestoneName = "";
    if ($scope.selectedIssue.Milestone== undefined) {
        milestoneId = "";
        milestoneName = "";
    } else {
        milestoneId = $scope.selectedIssue.Milestone.Id;
        milestoneName = $scope.selectedIssue.Milestone.Name;
    }
    var arrMembersToNotify = [];
    var arrMembersToNotifyNew = [];
    var iCount = 0;
    $("#membersToNotify input[type=checkbox]:checked").each(function () {
        arrMembersToNotify = $(this).val().split("~");
        arrMembersToNotifyNew.push({ "UserId": arrMembersToNotify[0], "UserDisplayName": arrMembersToNotify[1], "Email": arrMembersToNotify[2] });         
    }); 
    var issueDetails =
   {
    Id: issue.Id,
    ProjectId: issue.ProjectId,
    ProjectName: issue.ProjectName,
    IssueStatusId: $scope.selectedIssue.Status.Id,
    StatusName: $scope.selectedIssue.Status.Name,
    IssuePriorityId: $scope.selectedIssue.Priority.Id,
    PriorityName: $scope.selectedIssue.Priority.Name,
    AssignedUserId: $scope.selectedIssue.AssignedTo.Id,
    AssigneeDisplayName: $scope.selectedIssue.AssignedTo.DisplayName,
    IssueCategoryId: $scope.selectedIssue.Category.Id,
    CategoryName: $scope.selectedIssue.Category.Name,
    DueDate: $scope.selectedIssue.DueDate,
    OwnerUserId: $scope.selectedIssue.OwnedBy.Id,
    OwnerDisplayName: $scope.selectedIssue.OwnedBy.DisplayName,
    IssueTypeId: $scope.selectedIssue.Type.Id,
    IssueTypeName: $scope.selectedIssue.Type.Name,
    IssueResolutionId: $scope.selectedIssue.Resolution.Id,
    ResolutionName: $scope.selectedIssue.Resolution.Name,
    MilestoneId: milestoneId,
    MilestoneName: milestoneName,
    Estimation: $scope.selectedIssue.Estimation,
    Progress: $scope.selectedIssue.Progress,
   };
    var url = window.location.protocol + '//' + window.location.host + '/api/Issues' + '/UpdateIssueDetails/';
    $http.post(url, [issueDetails, arrMembersToNotifyNew]).success(function (data, status, headers, config) {
        if (data != '' || data.length >= 0 || data == true) {
            //$scope.selectedIssue = issue;
            //$scope.showIssueDetails($scope.selectedIssue);
            $scope.GetAssignedIssues();
        }
        else if (data == '' || data == false) {
            $scope.selectedIssue = null;
        } else {
            $scope.errors.push(data.error);
        }
    });
};

MVC控制器代碼

  [HttpPost]
    [AuthenticationRequired]
    public bool UpdateIssueDetails(IssueBO issue,List<IssueNotification> lstMembersToNotify)
    {
        try
        {
            //var issueDetails = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(issueAllDetails[0].ToString());
            //List<Dictionary<string, string>> membersToNotifyDetails = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(issueAllDetails[1].ToString());
            var membersToNotify = lstMembersToNotify.Select(membersToNotifyDetail =>
                                                                new IssueNotification()
                                                                {
                                                                    UserId =membersToNotifyDetail.UserId,
                                                                    Email =
                                                                        membersToNotifyDetail.Email,
                                                                    UserDisplayName =
                                                                        membersToNotifyDetail.UserDisplayName
                                                                }).ToList();
            var newIssue = new IssueBO
            {
                OwnerUserId = issue.OwnerUserId,
                OwnerDisplayName = issue.OwnerDisplayName,
                LastUpdatedUserId = SessionItems.UserId,
                LastUpdaterDisplayName = SessionItems.DisplayName,
                LastUpdatedOn = DateTime.Now,
                ProjectId = issue.ProjectId,
                ProjectName = issue.ProjectName,
                Id = issue.Id,
                AssignedUserId = issue.AssignedUserId,
                AssigneeDisplayName = issue.AssigneeDisplayName,
                IssueStatusId = issue.IssueStatusId,
                StatusName = issue.StatusName,
                Progress = issue.Progress,
                IssuePriorityId = issue.IssuePriorityId,
                PriorityName = issue.PriorityName,
                IssueTypeId = issue.IssueTypeId,
                IssueTypeName = issue.IssueTypeName,
                IssueCategoryId = issue.IssueCategoryId,
                CategoryName = issue.CategoryName,
                IssueResolutionId = issue.IssueResolutionId,
                ResolutionName = issue.ResolutionName,
                DueDate = issue.DueDate,
                Estimation = issue.Estimation,
                MilestoneId = issue.MilestoneId,
                MilestoneName = issue.MilestoneName
            };
            var result = BLL.AdminLayer.UpdateIssueDetail(newIssue, membersToNotify);
            return result.IsSuccessful && result.Result;
        }
        catch (Exception ex)
        {
            BLL.Base.BaseLayer.WriteApplicationLog(ex);
            return false;
        }
    }

我正在從我的angularjs控制器傳遞兩個json數組,像這樣-$ http.post(url,[issueDetails,arrMembersToNotifyNew])。success(函數(數據,狀態,標頭,配置)。但是嘗試此操作時我出錯,請提出建議如何實現這一目標。

您需要使用JSON.stringify()將數據傳遞給操作

$http.post(url, JSON.stringify({ issue: issueDetails, 
     lstMembersToNotify: arrMembersToNotifyNew 
});

將其發布為對象的屬性。

$http.post(url, { issue: issueDetails, lstMembersToNotify: arrMembersToNotifyNew });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM