Подтвердить что ты не робот

Ошибка с JQuery Mobile

Ниже я получаю эту ошибку:

enter image description here

Я сузил код проблемы с JQuery Mobile 1.0 или выше и Asp.NET ScriptManager.

Я добавил новый проект Web Forms в Visual Studio 2012 и включил следующий код:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
    <link rel="stylesheet" href="#" onclick="location.href='http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.css'; return false;" />

    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"></script>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>

</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" ScriptMode="Release" runat="server"></asp:ScriptManager>
    <div>

    </div>
</form>
</body>
</html>

Код отсутствует в коде.

  • Это он, однако, когда я запускаю проект, , я получаю вышеуказанную ошибку когда включены ScriptManager и JQuery Mobile script.
  • Не возникает ошибка, когда JQuery Mobile или ScirptManager удалены.

Полдня, задаваясь вопросом и пытаясь найти объяснение, один конкретный веб-сайт, с которым я столкнулся, предложил добавить ScriptMode = "Release" в ScriptManager.

После добавления ScriptMode = "Release" в ScriptManager, я не получил вышеуказанную ошибку.

Поиск MSDN, который определяет ScriptMode: Получает или задает значение, определяющее, отображаются ли отладочные или выпущенные версии клиентских библиотек script.

Ошибка не была добавлена ​​после добавления ScriptMode в ScriptManager, но почему? Может кто-нибудь объяснить, почему добавление ScriptMode прекращает появление ошибки, и просто добавив ScriptMode, значит, действительно решатель или Band-Aid?

Ошибка здесь: enter image description here

Спасибо

Ниже я включил отображаемую HTML-страницу:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title><link rel="stylesheet" href="#" onclick="location.href='http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css'; return false;" />
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>

</head>
<body>
    <form method="post" action="WebForm1.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE3MTc1MDc5MjBkZKegov+UVDfF6HxSUeRymFH24991gFZlPU0b/IsFSVOC" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<script src="/WebResource.axd?d=YNeW-uV30W9QUFseu7cpdlXTvjGS-17TUbJFOrYgly8h7oJPnNmO65B9MsXEKqakJOaVgg29CB6vB4ZdmlLF7g8EEKPfdXLBpPT96ABclOM1&amp;t=634773918900000000" type="text/javascript"></script>


<script src="/ScriptResource.axd?d=1zt3Mkq4WcBu9zbsV4m9-M7KCvrT-jr1XXgEzhW9nlIjwSm5LqLoLvy1RRMu-5CPbCTtFRsnupAShqvEwf1EA89LxKLiAOgKvWaOicLhKJXKcoRKfxG9wfeNLN-ZylWfgK9ozBiE9bfZ-FsMcBHxpWRRemoiIMSGZzuYvNAs6Evl_1N7xJCIcbyAp01izsBK0&amp;t=6119e399" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>

<script src="/ScriptResource.axd?d=QXV43dBeyoevgM325nU9rlBmVyB375pfaFEuLQ1v1BisiTdf-HdmxtF90_hgFfCcn3l6abc0C_OIvNebx_7cosgD1E8ZEeTK680r4HRGT7Pngzk9Ei-BKOI48hrwHGv9cUfKN2zloA0qh8YHXKfefO8eUGQhV8M-XarSzMOPpgJwr8FS8Yb8rvlVPvcSzSTE0&amp;t=6119e399" type="text/javascript"></script>
        <script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ScriptManager1', 'form1', [], [], [], 90, '');
//]]>
</script>

        <div>
        </div>
    </form>
</body>
</html>

Ниже я покажу, как я попытался включить noConflict:

<link rel="stylesheet" href="#" onclick="location.href='http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css'; return false;" />
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>

<script type="text/javascript">
    $.noConflict();
</script>

<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
4b9b3361

Ответ 1

Я проверил ваш код, и я смог реплицировать ошибку.

Во-первых, я считаю, что ScriptManager должен существовать до того, что его использует. Это приведет к ошибке:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
    <link rel="stylesheet" href="#" onclick="location.href='http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.css'; return false;" />
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    </form>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"></script>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
</body>
</html>

Во-вторых, сценарии, которые вы включаете, - это мини-версии или выпуски. Это неподтвержденное предположение, но, возможно, оно ожидает неминифицированных или отладочных версий для рендеринга, и их не существует, и установка ScriptMode = "Release", возможно, позволяет ему знать, что он должен использовать мини-версии. Это можно было протестировать, включив в проект мини-сценарии и отладочные сценарии, а не удалять их удаленно... Вот как работает MVC, поэтому я предлагаю, чтобы, возможно, веб-приложение работало одинаково.

Кроме: Следуя информации об этом ссылка, это еще один способ, который не вызывает ошибок:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
    <link rel="stylesheet" href="#" onclick="location.href='http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.css'; return false;" />
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Scripts>
                <asp:ScriptReference Path="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"/>
                <asp:ScriptReference Path="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.js" />
            </Scripts>
        </asp:ScriptManager>
    </form>
</body>
</html>

Изменить:

По какой-то причине я также попытался установить это в Web.config:

<compilation debug="true" targetFramework="4.0"/>

:

<compilation debug="false" targetFramework="4.0"/>

Это также работает с вашим исходным кодом, но по какой-то причине мне кажется, что это бандад, потому что скорее всего он просто скрывает ошибку, а не исправляет ее.