2014-07-02 38 views
0

我一直在关注网络教程,试图在.NET MVC应用程序上学习angularJS。所有的教程似乎涵盖获取一个列表,获取单个项目等。与MVC调用angularJS - 如何做除CRUD以外的东西?

我想要做的是允许用户填写一个电子邮件地址,我想验证该电子邮件地址对数据库并返回true或如果存在则为假。然后我试图把这个价值放在范围内,这样我就可以做出一些事情来回应它的真实还是错误。

我正在使用单页面应用程序,所以这是登录html。

<form name="form" class="form-horizontal"> 
    <div class="control-group" ng-class="{error: form.ValidEmailAddress.$invalid}"> 
     <label class="control-label" for="ValidEmailAddress">Valid Email Address</label> 
     <div class="controls"> 
      <input type="email" ng-model="item.ValidEmailAddress" id="ValidEmailAddress"> 
     </div> 
    </div> 
    <div class="form-actions"> 
     <button ng-click="login()" class="btn btn-primary"> 
      Go! 
     </button> 
     <label ng-if="user.isAuthorised">Authorised</label> 
     <label ng-if="!user.isAuthorised">NotAuthorised</label> 
    </div> 
</form> 

在我的app.js文件中,我声明了一个loginCtrl控制器,当url是/ login时,所以这一切都很好。那我号召我的按钮点击其中的逻辑是这样的:

var LoginCtrl = function ($scope, $location, $http, AuthorisedUser) { 

    $scope.login = function() { 
      var isValidUser = $http.get("/AuthorisedUser/IsValidUser/" + $scope.item.ValidEmailAddress); 
      $scope.user.isAuthorised = isValidUser; 
    } }; 

然后是调用的MVC AuthorisedUserController类方法:

public bool IsValidUser(string id) 
{ 
    var list = ((IObjectContextAdapter)db).ObjectContext.CreateObjectSet<ApprovedUser>(); 
    var anyItems = list.Any(u => u.ValidEmailAddress == id); 
    return anyItems; 
} 

所以,依稀仿佛当我把一个是工作值“aaa”放入文本框中。但是,尽快我尝试在电子邮件地址中输入值是未定义的。也许我应该做一个帖子,但我可以成功击中我的.NET控制器的唯一方法是使用get。

我确定我错过了基本知识,并有可能以错误的方式解决这个问题。

在情况下,它可以帮助我创建了一个模块工厂的定义是这样的:

var EventsCalendarApp = angular.module("EventsCalendarApp", ["ngRoute", "ngResource"]). 
    config(function ($routeProvider) { 
     $routeProvider. 
      when('/login', { controller: LoginCtrl, templateUrl: 'login.html', login: true }). 
      otherwise({ redirectTo: '/' }); 
    }); 


EventsCalendarApp.factory('AuthorisedUser', function ($resource) { 
    return $resource('/api/AuthorisedUser/:id', { id: '@id' }, { isValidUser: { method: 'GET' } }); 
}); 

我的一个问题是 - 我应该使用$ HTTP对象访问控制方法,还是有

AuthorisedUser.IsValidUser($scope.item.validEmailAddress) 

我知道在本教程中,我下面,我可以做的东西一样:

CalendarEvent.save() 
使用我厂的声明,这样我就可以去类似的方式

能够调用CalendarEventController post方法。

+0

那么“AAA”的作品,但电子邮件却没有? – Jorg

+0

正确(我最初有我的输入类型的文本,并试图将其更改为电子邮件,以帮助(我注意到我复制上面),但它开始通过undefined,而不是输入框中的字符串 – Jen

+0

' @'不能用在url中,get请求使用url参数.' @'是一个保留关键字。也许你可以尝试编码/解码它。 – Jorg

回答

1

我认为你的get()函数会返回一个承诺。你不能像这样分配承诺。所以最好尝试一次。我希望它能工作。如果不是请让我知道...

这里我假设你的代码的第一,第二和第三片段正常工作......

$http.get("/AuthorisedUser/IsValidUser/" + $scope.item.ValidEmailAddress).success(function (result, status) { 

     var isValidUser=result; 
     $scope.user.isAuthorised = isValidUser; 
     $scope.$apply(); 
    }).error(function (result, status) { 
     //put some error msg 
    }); 
+0

对不起昨天晚上发表评论和工作互联网决定进入冷宫!这个解决方案可能是我需要的方向,但仍然存在关于mvc控制器不喜欢传递给它的电子邮件地址的问题。基于Jorg的说法,我可能需要弄清楚编码它什么的。谢谢。 – Jen

+0

要解决我的错误,我不得不添加一个尾部斜杠(“/ AuthorisedUser/IsValidUser /”+ $ scope.item.ValidEmailAddress +“/”),之后停止了404错误。但你的回答让我更好地处理了异步调用的成功和失败。谢谢:) – Jen

+0

哦,终于高兴,它帮助你。如果仍然有问题,你可以问。任何人都可以提供更好的解决方案。 – micronyks

相关问题