我花了一段时间才弄清楚如何让 angularjs 与 asp.net mvc 一起工作——这不是 100% 你做事的方式,但你可能想重新考虑这种方法(反正没有太大不同)
var AccountApp = angular.module("AccountApp", ['$strap.directives', 'ngResource', 'ngGrid', 'filePickers']).
config(function ($routeProvider) {
$routeProvider.
when('/', { controller: ListCtrl, templateUrl: 'Templates/Account/List' }).
when('/', { controller: EditCtrl, templateUrl: 'Templates/Account/Edit' }).
otherwise({ redirectTo: '/' });
});
好的,请注意我正在调用模板/帐户/列表。
在我的 RouteConfig.cs
routes.MapRoute(
name: "Templates",
url: "Templates/{controller}/{template}",
defaults: new { action = "Template" }
);
现在在每个控制器中,我都有这个相应的操作,将调用定向到适当的局部视图:
public ActionResult Template(string template)
{
switch (template.ToLower())
{
case "list":
return PartialView("~/Views/Account/Partials/List.cshtml");
case "create":
return PartialView("~/Views/Account/Partials/Create.cshtml");
case "edit":
return PartialView("~/Views/Account/Partials/Edit.cshtml");
case "detail":
return PartialView("~/Views/Account/Partials/Detail.cshtml");
default:
throw new Exception("template not known");
}
}
这一切都从控制器中的 Index() 动作开始。
public ActionResult Index()
{
return View();
}
综上所述,我的目录结构如下所示。
/Views
/Account
/Partials
List.cshtml
Create.cshtml
Edit.cshtml
Detail.cshtml
Index.cshtml
我有偏见,因为这是我的方法,但我认为它使事情变得超级简单并且井井有条。Index.cshtml 包含 ng-view 并且应用程序的所有其他部分都很好地包含在通过该模板操作加载的部分视图中。希望这可以帮助。