Bene, questo è il modo in cui lo uso.
C'è index.cshtml
come questo
@using System.Web.Optimization
@inherits System.Web.Mvc.WebViewPage
@{ Layout = null; }<!DOCTYPE html>
<html data-ng-app="MyProject">
<head>
<title data-ng-controller="TitleCtrl" data-ng-bind="Title">My Project</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
@Styles.Render("~/Content/min/css")
</head>
<body class="body" id="body">
<div class="body" data-ui-view="body"></div>
@Scripts.Render("~/js/angular")
@Scripts.Render("~/js/MyProject")
</body>
</html>
NOTA: utilizzando angolare UI-Router
, è per questo che ui-view
è in palce
Ma ancora ci deve essere HomeController
:
public class HomeController : Controller
{
public ActionResult Index()
{
// below I do some tricks to make app running on
// http://mydomain/app as well as on
// http://mydomain/app/ (see the/at the end)
var root = VirtualPathUtility.ToAbsolute("~/");
var applicationPath = Request.ApplicationPath;
var path = Request.Path;
var hasTraillingSlash = root.Equals(applicationPath
, StringComparison.InvariantCultureIgnoreCase)
|| !applicationPath.Equals(path
, StringComparison.InvariantCultureIgnoreCase);
if (!hasTraillingSlash)
{
return Redirect(root + "#");
}
// my view is not in Views, but in the root of a web project
return View("~/Index.cshtml");
}
}
Quindi, in questo modo posso utilizzare la potenza della configurazione Bundle (javascript, css) ... mentre si avvia angolare a http://mydomain/app
o http://mydomain/app/
. controllare anche simile here
Anche in global.asax, dovremmo configura ASP.NET MVC:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("fonts*.woff");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id =UrlParameter.Optional}
);
}
mentre web API dovrebbe essere:
const string IdPattern = @"\d+|[A-Za-z]{1,2}";
public static void SetRouting(HttpConfiguration config)
{
// some custom routes
...
// and a default one
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}"
, constraints: new { id = IdPattern }
, defaults: new { id = RouteParameter.Optional }
);
Diciamo che ho menù che ha pagina prodotti. dopo aver raggiunto la dashboard se faccio clic sulla lista dei prodotti, come mi reindirizzerà alla pagina products.cshtml? – micronyks
in questo momento ho impostato ui router come questo ... url: '/ products', template: '/ products. html ' – micronyks
Ho esteso la mia risposta con Routing per MVC (Home/Index) e Web API. Il trucco è che mentre la Home/Index è caricata e index.csthml è renderizzato ... non abbiamo bisogno di alcun redirecton. Avremo SPA ... ora è compito Angolare caricare tutte le viste ... –