MVC2: JQuery не работает, когда страница деталей разбита на страницы - PullRequest
0 голосов
/ 13 декабря 2010

Проблема:

У меня есть проект MVC2, который использует страницу сведений и главную страницу. Когда страница Подробности запускается в первый раз, все отлично - все javascript и jquery работают просто отлично. Однако, когда разбивка на страницы выполняется (с использованием PaginatedList в виде учебника NerdDinner), вторая страница не загружает объект jquery. (JQuery = "undefined").

Понятия не имею, почему вторая страница не работает. Я сократил решение до следующего минимального кода, чтобы показать поведение:

Страница Master.aspx:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<!DOCTYPE html PUBLIC 
          "-//W3C//DTD XHTML 1.0 Strict//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>
    <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
</title>

<script src="../../Scripts/jquery-1.4.2.min.js" 
            type="text/javascript" language="javascript"></script>
<script type="text/javascript" language="javascript">
    $(function () {
        alert('MasterPage');
    });
</script>

<%-- scripts from child pages get inserted here --%>
<asp:ContentPlaceHolder ID="ScriptContent" runat="server" />
</head>
<body>
<div id="main">
    <asp:ContentPlaceHolder ID="MainContent" runat="server" />
</div>
</body>

Страница Details.aspx:

<%@ Page Title="" Language="C#" 
         MasterPageFile="~/Views/Shared/Site.Master"     
         Inherits="System.Web.Mvc.ViewPage<WidgetViewModel>" %>

<asp:Content ID="TitleContent" 
             ContentPlaceHolderID="TitleContent" 
             runat="server">
The Title
</asp:Content>

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

<script type="text/javascript" language="javascript">
    alert('DetailsPage');
</script>
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%-- No Content --%>
</asp:Content>
  • Библиотека JQuery - единственная библиотека, которую я загружаю.
  • Сценарии, показанные выше, являются единственными сценариями, которые у меня есть.

Источник сведений / {somequery} (оба предупреждения отображаются, как и ожидалось)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
<title>

The Title

</title>

<script src="../../Scripts/jquery-1.4.2.min.js" 
            type="text/javascript" language="javascript"></script>
<script type="text/javascript" language="javascript">
    $(function () {
        alert('MasterPage');
    });
</script>


<script type="text/javascript" language="javascript">
    alert('DetailsPage');
</script>
</head>

<body>
<div id="main"></div>
</body>
</html>

Исходный код Details / {somequery} / 1 (работает ТОЛЬКО предупреждение Details.aspx)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

The Title

</title>

<script src="../../Scripts/jquery-1.4.2.min.js" 
            type="text/javascript" language="javascript"></script>
<script type="text/javascript" language="javascript">
    $(function () {
        alert('MasterPage');
    });
</script>


<script type="text/javascript" language="javascript">
    alert('DetailsPage');
</script>
</head>

<body>
<div id="main"></div>
</body>
</html>

1 Ответ

0 голосов
/ 14 декабря 2010

Я бы согласился с комментарием @ Джоша, так как в зависимости от вашего маршрута будет меняться относительный путь ... Сделайте его абсолютным или, еще лучше, используйте версию jQuery для CDN:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" 
    type="text/javascript" language="javascript"></script>
...