Asp.net mvc 使用AngularJS/.NET不作为SPA

Asp.net mvc 使用AngularJS/.NET不作为SPA,asp.net-mvc,angularjs,Asp.net Mvc,Angularjs,这个问题可能不是很具体,但我想知道如何使用AngularJS+ASP.NETMVC创建一个不是真正的SPA应用程序 我即将开始AngularJS与前端非常匹配的项目:前端将有很多动态计算和情况,这些都得益于AngularJS的双向绑定模型 然而,我热衷于尽可能地在服务器端预加载和呈现页面,以减少一些不必要的AJAX请求。例如,对于这个应用程序来说,像传统的MVC应用程序一样在ViewBag中实际获取并存储页面加载数据比将其强制存储到SPA中更有意义。当然,也有一些场景仍然会使用AJAX,这对于A

这个问题可能不是很具体,但我想知道如何使用AngularJS+ASP.NETMVC创建一个不是真正的SPA应用程序

我即将开始AngularJS与前端非常匹配的项目:前端将有很多动态计算和情况,这些都得益于AngularJS的双向绑定模型

然而,我热衷于尽可能地在服务器端预加载和呈现页面,以减少一些不必要的AJAX请求。例如,对于这个应用程序来说,像传统的MVC应用程序一样在ViewBag中实际获取并存储页面加载数据比将其强制存储到SPA中更有意义。当然,也有一些场景仍然会使用AJAX,这对于Angular来说是完美的

我感兴趣的事物,例如:

  • 如何从ViewBag集合初始化角度模型
  • 这种方法还有其他选择吗(我想,Angular仍然是一个有效的选择吗)
  • 你有没有看过这方面的论文/教程
您仍然可以将应用程序设置为单页并使用MVC。Angular使用片段作为视图,没有任何东西表明这些片段不能在服务器上预渲染

MVC控制器返回预渲染Razor视图以用于Angular的基本示例

public class PartialsController : Controller
{
    [Route("Partials/{view}")]
    [Route("Partials/{view}/{sub?}")]
    public ActionResult Index(string view, string sub)
    {
        var partial = sub != null ? view + "/" + sub : view;
        try
        {
            return View(partial);
        }
        catch (Exception)
        {
            return HttpNotFound();
        }
    }
}
在这里,我生成了一个庞大的表,所以我使用Razor“预绑定”模型并生成行,而不是使用ng repeat

@ { 
Layout = null; 
var project = new SomeController.GetCurrentProject(); 
var keys = project.GetType().GetProperties().OrderBy(x => x.Name); 
}
<!-- Quick'n'dirty table view -->

        <table class="table table-responsive project-name-table">
            <tr>@{ foreach (var key in keys) 
                {
                <th ng-if="visibleFilter.@key.Name"> 
                 <a ng-click="order.on='@key.Name';order.reverse=!order.reverse">@key.Name</a>    
                </th>
                 } 
                }
        </table>
@{
布局=空;
var project=new SomeController.GetCurrentProject();
var keys=project.GetType().GetProperties().OrderBy(x=>x.Name);
}
@{foreach(键中的var键)
{
@键。名称
} 
}

我的答案将集中在:

这种方法还有其他选择吗(我想,Angular仍然是一个有效的选择吗)

我不会说不要使用AngularJS,但是我会说,如果您真正想要利用的只是双向数据绑定,那么不要使用SPA框架

为什么?

要么选择温泉,要么不选择。拉入SPA框架可能会让您超时构建所述框架的越来越多的功能,最终导致应用程序的方法不一致

还可以认为Angular及其所有特性可能会使双向数据绑定模式过于复杂

备选方案

选择一个双向数据绑定库,在我看来,与ASP.NET MVC很好的匹配是令人失望的,因为它有很多支持(例如ASP.NET MVC Helpers等)

请参阅:

(用于淘汰赛的ASP.NET MVC扩展)

前进


此时,选择使用数据绑定库而不是SPA框架不会限制您将来迁移到SPA体系结构(大多数库与其他库兼容,这些库组合后可以为您提供SPA体系结构),然而,当这一点到来时,你可以大规模地采取这一行动。

谢谢你的回答,kmvc肯定+1-看起来很有趣。这是一个有趣的方法-我将做一个小测试,看看这个预绑定的实际效果。