尝试将自定义Javascript集成到ASP.NET webforms应用程序

时间:2016-06-28 12:58:28

标签: javascript c# webforms asp.net-4.5

我在这里泡菜....

我正在尝试创建一个针对.NET 4.5.2的新的,非常标准的ASP.NET Webforms应用程序。我以前做过很多次了 - 但是从来没有遇到过这些问题(并且不能完全弄清楚为什么它们现在发生,从未发生过......)。

我的客户提供了一组CSS和Javascript作为项目的基础,其中包括Bootstrap和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>

这似乎有效 - 直到我第一次部署到我们的测试环境。在那里,应用程序不是&#34; rooted&#34;,例如它们安装在IIS设置中,其中应用程序的路径为http://test.server.com/apps/MyApp - 现在我对/Scripts/....的引用全部中断,找不到任何内容

尝试#2

我尝试更改脚本的include以使用之前使用过的ResolveUrl()方法:

<!-- 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 应该根据应用程序的根目录(无论在哪里)解析这些名称并包含这些脚本。

麻烦:现在我得到一个错误(启动时)说的话(从德语自由翻译):

  

由于控件包含代码块(例如&lt;%...%&gt;)

,因此无法修改控件集合

请原谅?!?!?!?!?!

尝试#3

所以我的最后一招是使用这样的数据绑定表达式:

<!-- Scripts -->
<script type="text/javascript" src="<%# ResolveUrl("~/Scripts/vendors.min.js") %>"></script>
<script type="text/javascript" src="<%# ResolveUrl("~/Scripts/jquery.validate.min.js") %>"></script>

这需要我做一个

Page.Header.DataBind();

在母版页的OnInit事件处理程序中,一旦我这样做,当我尝试使用DevExpress网格时,我得到一个令人讨厌的错误:

  

无法加载视图状态。正在加载视图状态的控制树必须与在上一个请求期间用于保存视图状态的控制树匹配。例如,在动态添加控件时,回发期间添加的控件必须与初始请求期间添加的控件的类型和位置相匹配。

好的,所以我的智慧结束了 - HOW 在地球上我可以将一些Javascript文件包含到ASP.NET Webforms应用程序中< em>今天,在2016年,所以一切正常 - 没有讨厌的.NET错误,没有找不到Javascript .......你的解决方法是什么我的这种困境??

1 个答案:

答案 0 :(得分:2)

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

中描述的this answer

此外,如果您从runat="server"标记中删除<head>,则尝试#2会有效。如果您没有从代码隐藏中访问头标记,则无需将其作为服务器控件。

或者,对于一个更现代的&#34;方法,ASP.NET Bundling and Minification的东西也适用于WebForms。我已经在一些项目中使用它而没有任何问题。