Как включить внешнее приложение Angular 2 в ASPX-страницу ASP.NET Webforms

Другая команда (читай аутсорсинг) написала приложение Angular 2, а затем прислала нам скомпилированные файлы.

Как мне включить эти (сейчас) файлы js в мою страницу aspx? Это не может быть так просто, как:

<%@ Page Title="" Language="C#" MasterPageFile="~/CISBase.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="StudyPrograms.Default" MaintainScrollPositionOnPostback="True" %>

<%@ MasterType VirtualPath="~/CISBase.Master" %>


<asp:Content ID="HeadContent" ContentPlaceHolderID="CISBaseHead" runat="server">
  <script type="text/javascript" src="../CIS.js"></script>
  </asp:Content>
<asp:Content ID="BodyContent" ContentPlaceHolderID="CISBaseMainContent" runat="server">
  <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
  <section id="pageContent">

    <app-root>Loading...</app-root>
    <script type="text/javascript" src="AngularModules/inline.bundle.js">
</script>
    <script type="text/javascript" src="AngularModules/main.bundle.js"></script>
    <script type="text/javascript" src="AngularModules/polyfills.bundle.js"></script>
    <script type="text/javascript" src="AngularModules/vendor.bundle.js"></script>
    <link href="AngularModules/styles.bundle.css" rel="stylesheet" />

  </section> 

</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="CISBaseBottomScript" runat="server">
</asp:Content>

Может это? Я бы предположил, что мне нужно вызвать функцию, чтобы вызвать запуск файлов javascript? Или я делаю это неправильно, поскольку единственные решения, которые я продолжаю находить, включают создание ядра.NET или приложения MVC, а затем добавление к нему файлов Angular (я рассматривал эту возможность)?

Я почти ничего не знаю об Angular 2 (я учусь, но я не знаю достаточно, чтобы создавать код профессионального качества, особенно по нашему текущему короткому графику), поэтому другая команда пишет код Angular.

Любой совет направления очень ценится (я искал ответы в течение нескольких часов).

1 ответ

Я нашел свой ответ в этом посте: Angular2: не могу прочитать свойство 'call' из undefined (при начальной загрузке) и в этом посте: Angular2 Selector не соответствует ни одному элементу с bundle и ECM6

В частности, мне нужно было установить Async="false" в объявлении моей страницы,

<%@ Page Title="" Language="C#" MasterPageFile="~/CISBase.Master" AutoEventWireup="true" 
CodeBehind="Default.aspx.cs" Inherits="StudyPrograms.Default" 
MaintainScrollPositionOnPostback="True" Async="false" %>

добавить ScriptManager с EnablePageMethods="true",

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>

а затем вызывать мои скрипты в определенном порядке: inline, polyfills, vender, main. Во втором посте конкретно говорится, чтобы вызывать ваши скрипты после тега приложения, т.е.

...
<app-root>Loading...</app-root>

<script type="text/javascript" src="AngularModules/inline.bundle.js"></script>
<script type="text/javascript" src="AngularModules/polyfills.bundle.js"></script>
<script type="text/javascript" src="AngularModules/vendor.bundle.js"></script>
<script type="text/javascript" src="AngularModules/main.bundle.js"></script>
<link href="AngularModules/styles.bundle.css" rel="stylesheet" />
...
</asp:Content>

РЕДАКТИРОВАТЬ: ноябрь 2017 Мы работали с кодом и обнаружили, что файлы карты необходимы. Мы нашли команду

ng build --env=prod

работает лучше чем

ng build --prod -output-hashing=none

поскольку первый дает файлы сопоставления, которые необходимы в приложении asp.net для того, чтобы все работало правильно.

Кроме того, я обнаружил еще один пост о необходимости добавить некоторый код в файлы index.html и app.modules.ts в этом сообщении стека: динамически устанавливать base href - Angular2/4 в отношении установки

<base href=""/>

так что угловое приложение добавляется в конец правильной структуры URL.

Другие вопросы по тегам