如何将字典从Javascript Angular客户端传递到MVC3服务器

时间:2014-05-21 12:32:27

标签: javascript asp.net-mvc asp.net-mvc-3 angularjs http

尝试将字典从JS传递到MVC但没有成功。数据(mvc控制器中的reportIdAndStatus)为空。

我正在使用angular $ resource和MVC 3.谢谢。

角度控制器:

var reportStatusdictionary = {};
//build a dictionary
            for (var x = 0; x < reports.length; x++) {
                reportStatusdictionary[reports[x].Id] = reports[x].StatusId
            }

reportsService.getReportStatusComment({ reportStatusdictionary: reportStatusdictionary }

角度资源定义:

 getReportStatusComment:
        {
            method: 'GET',
            params: { reportIdAndStatus: '@reportIdAndStatus', command: 'GetReportStatusComment' },
            isArray: false
        }

MCV控制器:

    [HttpGet]
    public string GetReportStatusComment(Dictionary<Guid, int> reportIdAndStatus)

浏览器中的请求:

enter image description here

1 个答案:

答案 0 :(得分:0)

我建议创建一个视图模型,以简化和简化调试,而不是字典。你可以这样做:

  1. 创建如下视图模型:

       public class ReportViewModel
       {
           public Guid Id{get;set;}
           public int StatusId{get;set;} 
       }
    
  2. 然后你的控制器看起来像

    [HttpGet]
    public string GetReportStatusComment(IEnumerable<ReportViewModel> reportViewModel)
    
  3. 然后你的获取网址将是

    http://localhost:53854/report/getreportstatuscomment?[0].id=guidValue1&[0].StatusId=1&[1].id=guidValue2&[1].StatusId=2

    您可以在JavaScript代码中轻松构建这样的url结构。您可以在@Darin Dimitrov's answerPhil Haack's blog postMSDN magazine article了解有关模型绑定的更多信息。

  4. <强>更新

    如果您不想构建该url结构,那么您可以将JSON发送到服务器。