我在angularjs和MVC5之间传输数据有些困惑。我正在创建单页面应用程序(SPA)。
我没有找到正确的工作方向。我熟悉mvc但不熟悉API。所以,请指导我一个正确的方法!!
提前致谢
答案 0 :(得分:4)
首先,使用当前版本的Visual Studio(2013),“Web表单”项目和“mvc”项目之间没有区别。只有一个Web应用程序项目,在里面你可以放任何你想要的东西。
根据我的经验,一个很好的方法来解决你的问题是创建普通的MVC控制器来呈现包含angularJS应用程序的剃刀视图,并为ajax方法的RESTful接口创建WebAPI控制器。
在angularJS中,您不需要手动执行ajax调用。有一种更方便,更强大的方式:资源。它们也适用于WebAPI设计,因为WebAPI控制器使用单一类型的对象(即客户),并且通过HTTP VERBS允许您执行CRUD。例如:
// assume we have a backend repository that handles the data
public HttpResponseMessage Get()
{
return this.Request.CreateResponse(HttpStatusCode.OK, this.repository.GetAllCustomers());
}
public HttpResponseMessage Post(Customer customer)
{
var modifiedCustomer = this.repository.Update(customer);
this.repository.SaveChanges();
return this.Request.CreateResponse(HttpStatusCode.OK, modifiedCustomer);
}
此方法查询所有可用客户并返回它们。您不在此处定义是返回JSON还是XML:WebAPI框架读取WebAPI请求的HTTP HEADERS并根据客户端的请求序列化数据。对于您可能正在使用的JSON,它通过定义的默认JSON序列化程序进行序列化。您可以覆盖它以更改JSON的创建方式,常见的方法是将JSON.NET与自定义设置一起使用。
AngularJS资源用于映射单个URL并在内部使用所有动词,并向您公开$ save,$ query,$ get等方法,因此它们非常合适。例如:
var customerRes = $resource('/customers');
var currentCustomers = customerRes.query(function(){ // query is mapped to the GET verb
currentCustomers[0].email = "foo@baz.bar";
currentCustomers[0].$save(); // default mapped to the POST verb
});
我建议您查看文档和示例以获取更多详细信息。
答案 1 :(得分:2)
您可以将MVC控制器功能与Async和MVC API一起使用。在Controller Async方法中,您需要手动处理所有响应,因为API已经构建了许多功能。在控制器异步方法中,您的应用程序将处理自我调用。 当然,API使您可以更灵活地处理不同的应用程序类型。
当您的MVC应用程序具有适用于不同类型应用程序的API时,您需要担心的是移动应用程序等。 1.泳池服务。 2. IIS中每个工作进程的线程。 当您在不同类型的应用程序的应用程序中使用API或Async方法时,这些将定义应用程序的规模。
答案 2 :(得分:1)
1)您可以创建简单Controller
- 并在内部创建将返回JsonResult
的方法
并通过AJAX
2)是 - 如果您想要构建API
- 您需要创建WebAPi
的新项目类型(现在是v 2.0) - 但您可以在一个solution
中创建它SPA
3)您可以致电ajax
asynchronous
- 这不是问题