尝试将自定义Javascript集成到ASP.NET webforms应用程序时遇到了一个又一个问题

尝试将自定义Javascript集成到ASP.NET webforms应用程序时遇到了一个又一个问题,javascript,c#,webforms,asp.net-4.5,Javascript,C#,Webforms,Asp.net 4.5,我在这里陷入困境 我正在尝试创建一个新的、标准的ASP.NET Webforms应用程序,目标是.NET 4.5.2。我以前做过很多次,但从来没有遇到过这些问题(也不太明白为什么它们现在发生,以前从未发生过……) 我的客户提供了一组CSS和Javascript作为项目的基础,其中包括引导和jQuery 现在,当我试图让我的第一个简单页面正常工作时,我在页面中添加一些额外的Javascript时遇到了严重的问题 尝试#1 我试图像这样包含我的Javascript文件: <%@ Master

我在这里陷入困境

我正在尝试创建一个新的、标准的ASP.NET Webforms应用程序,目标是.NET 4.5.2。我以前做过很多次,但从来没有遇到过这些问题(也不太明白为什么它们现在发生,以前从未发生过……)

我的客户提供了一组CSS和Javascript作为项目的基础,其中包括引导和jQuery

现在,当我试图让我的第一个简单页面正常工作时,我在页面中添加一些额外的Javascript时遇到了严重的问题

尝试#1

我试图像这样包含我的Javascript文件:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Web.MyMaster" %>
<!DOCTYPE html>
<html lang="en" class="no-js no-ie">
<head runat="server">
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=$start">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <webopt:BundleReference runat="server" Path="~/Content/css" />

    <!-- Favicons -->
    <link rel="shortcut icon" href="~/Images/Icons/favicon.ico" />

    <!-- Scripts -->
    <script type="text/javascript" src="/Scripts/vendors.min.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.validate.min.js"></script>

    <asp:ContentPlaceHolder ID="HeaderContent" runat="server"></asp:ContentPlaceHolder>
</head>
<!-- Scripts -->
<script type="text/javascript" src="<%# ResolveUrl("~/Scripts/vendors.min.js") %>"></script>
<script type="text/javascript" src="<%# ResolveUrl("~/Scripts/jquery.validate.min.js") %>"></script>
因此,在这种情况下,ASP.NET应该基于应用程序的根目录(无论位于何处)解析这些名称,并包含这些脚本

麻烦:现在我(在启动时)遇到了一个错误,比如(从德语自由翻译):

无法修改控件集合,因为控件包含代码块(例如)

请再说一遍

尝试#3

所以我最后的办法是使用如下数据绑定表达式:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Web.MyMaster" %>
<!DOCTYPE html>
<html lang="en" class="no-js no-ie">
<head runat="server">
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=$start">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <webopt:BundleReference runat="server" Path="~/Content/css" />

    <!-- Favicons -->
    <link rel="shortcut icon" href="~/Images/Icons/favicon.ico" />

    <!-- Scripts -->
    <script type="text/javascript" src="/Scripts/vendors.min.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.validate.min.js"></script>

    <asp:ContentPlaceHolder ID="HeaderContent" runat="server"></asp:ContentPlaceHolder>
</head>
<!-- Scripts -->
<script type="text/javascript" src="<%# ResolveUrl("~/Scripts/vendors.min.js") %>"></script>
<script type="text/javascript" src="<%# ResolveUrl("~/Scripts/jquery.validate.min.js") %>"></script>
在母版页的
OnInit
事件处理程序中,一旦我这样做,当我尝试使用DevExpress网格时,我会遇到一个严重错误:

未能加载viewstate。正在加载viewstate的控件树必须与上次请求期间用于保存viewstate的控件树匹配。例如,动态添加控件时,回发期间添加的控件必须与初始请求期间添加的控件的类型和位置匹配


好了,我的智慧已经到了尽头-在2016年的今天,我究竟如何才能在ASP.NET Webforms应用程序中包含一些Javascript文件,这样一切都可以正常工作-没有严重的.NET错误,没有找不到Javascript。。。。。。。你用什么方法来解决我的这个难题???

WebForms在脚本标记方面很特别。您可以做的一件事是使用上所述的

另外,如果您从
标记中删除
runat=“server”
,则尝试2也会起作用。如果您不是从codebehind访问head标记,则不需要将其作为服务器控件


或者,对于更“现代”的方法,这些东西也可以在WebForms中使用。我在一些项目中使用过它,没有任何问题。

您的页面是否驻留在应用程序根目录中?如果是这样,你可以简单地使用相对URL,例如,
@FrédéricHamidi:不,我的页面在几个子文件夹中,如果我从
中删除
runat=“server”
,我就不能再设置
页面。Title
属性……至于捆绑和缩小:听起来是个好主意,但是我遇到了很多问题-试图将各种
*.js
文件组合成一个包,但是当尝试将该包(及其“逻辑”名称)添加到脚本管理器时,我不断收到关于“这需要有一个.js扩展名”之类的错误。。。。。从未为我工作过(尚未)您应该能够使用
,但是您可能会遇到与尝试2相同的问题,服务器头标记。。。