Так я отправлял свою модель в угловой контроллер.
c # Контроллер:
public class AreaMenuController : RootController
{
// GET: Menu
public PartialViewResult Index()
{
var mod = Modules.Instance.ModuleList.FirstOrDefault(m => m.Prefix.Equals(base.GetArea(), StringComparison.CurrentCultureIgnoreCase));
return PartialView("_AreaMenu", mod.ModuleMenus);
}
}
Просмотр cshtml:
@using Nuclei.Models
@model IEnumerable<Nuclei.Models.Menu>
<script type="text/javascript">
@{ var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); }
window.areaMenus = @Html.Raw(serializer.Serialize(Model));
</script>
<script type="text/javascript" src="@Url.Content("~/Scripts/AngularControllers/_AreaMenuController.js")"></script>
<div ng-controller="AreaMenuController as vm" ng-init="vm.initializeController()">
<div id="accordion" ng-class="accordian-menu" style="visibility: visible;">
<ul>
<li ng-repeat="menu in vm.areaMenus">
...
</li>
</ul>
</div>
</div>
Angular Jsfile:
var NucleiApp = angular.module('NucleiApp');
NucleiApp.controller('AreaMenuController', ['$scope', '$http', '$location', function ($scope, $http, $location) {
"use strict";
var vm = this;
vm.initializeController = function () {
vm.areaMenus = window.areaMenus;
}
}]);
Вопрос 1: Существует ли более плавный способ отправки вашей модели c # на угол, отличный от объекта глобального окна?
Вы можете использовать$ http get from angular, однако, поскольку он обрабатывается на стороне клиента, перед его отображением всегда есть небольшая задержка, потому что ему нужно вызвать контроллер c # и получить данные.Так что я зарезервировал $ http get только для обновлений.
Другой способ, которым я думал, это сразу отправить представление Json-объекта:
c # controller:
public class AreaMenusController : RootController
{
// GET: Menu
public PartialViewResult Index()
{
return PartialView("_AreaMenu", GetAreaMenus());
}
public JsonResult GetAreaMenus()
{
var mod = Modules.Instance.ModuleList.FirstOrDefault(m => m.Prefix.Equals(base.GetArea(), StringComparison.CurrentCultureIgnoreCase));
return Json(new { areaMenus = mod.ModuleMenus }, JsonRequestBehavior.AllowGet);
}
}
Просмотр cshtml:
@using System.Web.Mvc
@model JsonResult
<script type="text/javascript">
window.areaMenus = @Model;
</script>
Вопрос 2: Я не совсем уверен, как инициализировать @model на этом этапе и отправить его в угловой файл и снова, если есть лучший вариант, чем объект глобального окна javascripts ... открой для предложений!