2016-05-06 111 views
0

我从视图传递网址到控制器$http.Post如何将URL从视图传递给Angularjs控制器文件?

视图(Asp.net MVC视图)

<form name="form" ng-controller="LoginController" > 
    <div id="dvContainer" ng-init="Url= @Url.Action("VerifyLogin", "Visitor")"> 
     <span ng-model="Message" class="text-danger"></span> 
     <table> 
      <tr> 
       <td>UserName</td> 
       <td> 
        <input name="txtUser" type="text" required ng-model="UserName" /> 
        <span ng-show="(form.txtUser.$dirty || submitted) && 
           form.txtUser.$error.required">UserName is required.</span> 
       </td> 
      </tr> 
      <tr> 
       <td>Password</td> 
       <td><input type="password" required ng-model="Password" /></td> 
      </tr> 
      <tr> 
       <td colspan="2"><button type="submit" ng-click="submit($event)">Login</button></td> 
      </tr> 
     </table> 

    </div> 
</form> 

在我的控制器(Angularjs控制器)

var app = angular.module('VisitorApp', []); 

//AngularJS controller 
app.controller('LoginController', function ($scope, $http) { 
    $scope.submit = function() { 
     alert('hi') 
     // Set the 'submitted' flag to true 
     alert($scope.UserName); 
     alert($scope.Password); 
     var loginModel = { 
      UserName: $scope.UserName, 
      PassWord:$scope.Password 
     }; 

     $http.post($scope.Url, loginModel).success(function (data) { 
      $scope.Message = data.Message; 
     }).error(function (data) { 
      $scope.error = "An error has occured while adding! " + data; 
     }); 
    }; 
}); 

我试图访问正在使用NG-初始化定义的URL。该应用程序正在抛出错误

[$parse:syntax] Syntax Error: Token '/' not a primary expression at column 6 of the expression [Url= /Visitor/VerifyLogin] starting at [/Visitor/VerifyLogin]. 

我是Angularjs的新手,所以无法弄清楚我做错了什么。

+0

也许有一个额外的/在开始或结束? –

+0

“$ scope.Url”在哪里/如何定义? – Kyle

+0

@KKKKKKKK它在这里定义ng-init =“Url = @ Url.Action(”VerifyLogin“,”Visitor“)” – ankur

回答

2

您可以使用角度值提供程序将此URL(或其他任何东西)从您的视图传递到角度控制器。

只需创建一个JavaScript对象并创建Url属性并设置其值并使用值提供程序传递此对象。

@section Scripts 
{ 
    <script src="~/Scripts/YourAngularControllerFileForThisPage.js"></script> 
    <script> 
     var myApp = myApp || {}; 
     myApp.Settings = myApp.Settings || {}; 
     myApp.Settings.Url= "@Url.Action("VerifyLogin","Visitor")"; 
     angular.module("app").value("appSettings", myApp); 
    </script> 
} 

现在在你的控制器,只需在使用AppSettings对象

var app = angular.module("app", []); 
app.controller('ctrl', ['$scope', 'appSettings', function ($scope, appSettings) { 
    $scope.URL = 'nothing'; 
    $scope.greeting = 'Hola!'; 
    console.log('Url ', appSettings.Settings.Url); 
    // You can use appSettings.Settings.Url for your ajax calls now 
}]); 
0

我已经遇到同样的问题,并没有想用价值的Url.Action传递给我的控制器。我发现在Url.Action的返回值的开始和结尾添加撇号可解决问题。我结束了写这个扩展来帮助我:

public static MvcHtmlString ActionString(this UrlHelper url, string action, string controller, object routeValues) 
    { 
     return MvcHtmlString.Create("'" + url.Action(action, controller, routeValues) + "'"); 
    } 
相关问题