当javascript包含在内容之上时,HTML页面会消失

时间:2011-02-19 15:02:42

标签: c# javascript jquery asp.net-mvc

我有一个ASP.NET MVC 3站点,我正在尝试启用客户端验证,但我遇到了一个非常奇怪的问题。页面加载和渲染就好了,直到我包含任何javascript文件。一旦我这样做,脚本标签下面的任何内容都会完全消失。例如,这渲染得很好(注意缺少javascript包括):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>@ViewBag.Title</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link href="/assets/css/style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <div class="main">
            @Html.Partial("Header")
            <div class="clr"></div>
            <div class="body_resize">
                <div class="body">
                    <div class="left">
                        @RenderBody()
                    </div>
                    <div class="right">
                        @RenderSection("RightContent")
                    </div>
                    <div class="clr"></div>
                </div>
                <div class="clr"></div>
            </div>
            @Html.Partial("BottomSection")
            @Html.Partial("Footer")
        </div>    
    </body>
    </html>

然而,这会导致整个页面为空白(请注意在HEAD部分添加了jQuery链接标记):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>@ViewBag.Title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link href="/assets/css/style.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" />
</head>
<body>
    <div class="main">
        @Html.Partial("Header")
        <div class="clr"></div>
        <div class="body_resize">
            <div class="body">
                <div class="left">
                    @RenderBody()
                </div>
                <div class="right">
                    @RenderSection("RightContent")
                </div>
                <div class="clr"></div>
            </div>
            <div class="clr"></div>
        </div>
        @Html.Partial("BottomSection")
        @Html.Partial("Footer")
    </div>    
</body>
</html>

如果我将脚本链接标记移动到页面底部,它会再次呈现,但我很确定我无法访问jQuery库。我尝试在脚本include(现在位于页面底部)上面添加它:

<script language="javascript" type="text/javascript">
        <!--
        $(document).ready(function () {
            alert('test');
        });
        //-->
    </script>

我的警报从未被解雇。

另外,同样的事情发生在一个单独的部分视图中:

<div id="formContainer">
    @using (Html.BeginForm())
    {
        <div class="tRightBoxMid tClear">
        <p style="padding:0;">
        Your Name&nbsp;&nbsp;@Html.ValidationMessageFor(m => m.Name)<br />
        @Html.TextBoxFor(m => m.Name, new { style = "width:275px" })<br />
        Your Email Address&nbsp;&nbsp;@Html.ValidationMessageFor(m => m.Email)<br />
        @Html.TextBoxFor(m => m.Email, new { style = "width:275px" })<br />
        Your Message&nbsp;&nbsp;@Html.ValidationMessageFor(m => m.Message)<br />
        @Html.TextAreaFor(m => m.Message, 4, 100, new { style = "width:275px" })<br />
        <input type="submit" class="formButton" value="Send Message" /><div id="msgSent" style="display:none;"><br /><br /><font color='green'><b>Message sent! A representative will be in touch with you shortly.</b></font></div>
        </p>
        </div>  
    }
</div>

<script type="text/javascript" src="/Assets/js/jquery.validate.min.js" />
<script type="text/javascript" src="/Assets/js/jquery.validate.unobtrusive.min.js" />

我的客户端验证永远不会解雇(请注意BOTTOM中的包含 - 页面渲染,但我无法访问包含的JS)。如果我将它移到顶部,我的页面的其余部分会加载,但这个局部视图会消失。

长话短说,任何存在的HTML,包含在我的网站中的任何地方似乎都在消失,当我将JS移到底部时,它就像它根本不包括在内。我已经尝试删除各个主体和其他部分的所有内容以消除它,但它似乎正在发生,即使几乎所有的标记和代码都被剥离出来......任何人都知道这里发生了什么?

4 个答案:

答案 0 :(得分:3)

尝试像这样关闭脚本标签

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>

然后尝试:

    <script language="javascript" type="text/javascript">

        $(document).ready(function () {
            alert('test');
        });

    </script>

答案 1 :(得分:3)

也许试试

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" ></script>

代替?

编辑:dang,beaten。

答案 2 :(得分:2)

您必须关闭脚本标记

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>

答案 3 :(得分:1)

这是因为你关闭标签的方式。试试这个:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" ></script>