【发布时间】:2015-02-21 23:38:55
【问题描述】:
我正在通过以下方式向服务器发出 Ajax 请求:
应用设置:
var appRoot = angular.module('demoApp', ['ngRoute', 'ngResource']);
appRoot.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/', { templateUrl: '/ngPartials/_Login.html', controller: 'LoginCtrl' })
.otherwise({ redirectTo: '/ngPartials/_Login.html', controller: 'LoginCtrl' });
}
]);
工厂:
appRoot.factory('LoginResource', function ($http) {
var loginResource = {
response:{},
get: function (param) {
$http.get('/Login/Login', param).
success(function (data, status, headers, config) {
this.response = data;
}).
error(function (data, status, headers, config) {
alert('error');
});
}
}
return loginResource;
});
控制器:
appRoot.controller('LoginCtrl', function ($scope, LoginResource) {
//Make a get request on login resource
$scope.User = LoginResource.get(
{
Role: val,
Email_Id: $scope.Email,
Pwd: $scope.Password
}, function (response) {
//do someting in callback function
});
});
但是我不知道我在上面的代码中做错了什么,当我收到请求时,参数(Role、Email_Id、Pwd)没有绑定到我的服务器 Action 方法。该方法被正确命中,但模型值没有被绑定。
服务器端模型:
public class LoginModel
{
public string Role { get; set; }
public string Email_Id { get; set; }
public string Pwd { get; set; }
public bool IsEmailValidation { get; set; }
}
动作方法:
[HttpGet, ActionName("Login")]
public JsonResult Login(LoginModel oLogin)
{
...
}
当我从角度调用上述动作方法时,该方法被命中,但对象 oLogin 中的所有属性均为空。我上面的代码出了什么问题?
编辑:
以前我使用 $resource 而不是 $http,如下所示,一切正常。
appRoot.factory('LoginResource', function ($resource) {
return $resource('/Login/Login');
});
【问题讨论】:
-
我是否正确地说您不能使用 GET 传递复杂对象。尝试使用 POST 方法,而不是 params 传入 JSON 对象 - 数据:param
-
我不能使用 POST 代替 GET,因为我将 POST 用于其他目的。我也尝试发送 JSON : var postdata = { data: param }; $http.get('/Login/Login', postdata) 但它也不起作用。
-
@SaurabhLprocks 看看this
-
@MohammadSepahvand - 如果我不能发送复杂对象,那么为什么以前我可以使用 $resource 发送它?
-
尝试将 [FromUril] 属性添加到 LoginModel 参数。如果这不起作用,您可以发布您的路线配置吗? asp.net/web-api/overview/formats-and-model-binding/…
标签: javascript c# ajax asp.net-mvc angularjs