2017-02-20 33 views
0

我现在将详细解释问题。我必须使用控制器中的$ http方法将一些参数或对象传递给MVC Action方法Three.but here when I click Route Three链接操作方法Home Controller中的三个调用两次,第一次调用templateUrl,然后调用控制器的$ http方法。在此我想先调用控制器,然后再加载视图(templateUrl)。请让我知道解决方案在AngulrJs路由中避免调用mvc动作方法调用两次

的角代码:

app.controller('routeparamtest', function($scope, $routeParams,$http) { 
     $http({ 
      url: "/Home/three", 
      method: "GET", 
      params: { id:20} 
     }); 

    }); 


    var configFunction = function ($routeProvider) { 
     $routeProvider. 

      .when('/routeThree', { 
       templateUrl: 'Home/Three', 
       controller: 'routeparamtest' 
      }); 
    } 

的MVC控制器代码:

public class HomeController : Controller 
{ 

    public ActionResult Three(int id = 1) 
    { 
      return View(); 
    } 
} 

的HTML代码:

<ul> 
     <li><a href="#/routeThree" > Route Three</a></li> 
    </ul> <div ng-view> 

的Three.cshtml代码:

some html code goes here 
+0

能否请您通过删除这些行尝试 $ HTTP({ URL: “/首页/三”, 方法: “GET”, PARAMS:{ID:20} }); 从您的控制器routeparamtest –

+0

如果我想要传递多个参数或对象,该怎么办?我该如何做到这一点 –

回答

0

如果你想传递多个参数,那么你只需要创建一个对象如下。

var data = [{ 
     Id: "1", 
     Value: "apple" 
    }, 
    { 
     Id: "2", 
     Value: "banana" 
    }]; 

并在anuglarjs调用传递它如下。

this.doSth = function(data){ 
    var response = $http({ 
     method: "post", 
     url: "Home/DoSth", 
     data: data 
     //or data: JSON.stringify(data) ?? 
     }); 
    return response; 
}; 

要获得MVC控制器的数据只是在你的方法创建一个类

public class MyClass 
{ 
    public int Id { get; set;} 
    public string Value { get; set;} 
} 

使用列表

public string DoSth(List<MyClass> data) 
{ 
    //access your data 
    //data[0].Id,data[0].Value or by any other way 
} 

希望这会帮助你。 感谢

+0

我的代码的问题是HomeController的三个方法调用两次第一个是为 templateUrl:templateUrl:'Home/Three '和angularjs控制器routeparamtest的secod时间。我们如何避免第一次调用,因为我想传递更多的参数或者可能是一个对象类型 –