WebForms UnobtrusiveValidationMode требует ScriptResourceMapping для «jquery». Пожалуйста, добавьте ScriptResourceMapping с именем jquery (с учетом регистра)

240

Я создаю веб-приложение с помощью Visual Studio 2012. Я пытаюсь добавить число слов в текстовое поле. Однако после добавления кодов javascript и html-кодов. Я получаю ошибку, как указано выше.

Вот мои кодировки javascript

Код:

function validateLimit(obj, divID, maxchar) {

objDiv = get_object(divID);

if (this.id) obj = this;

var remaningChar = maxchar - trimEnter(obj.value).length;

if (objDiv.id) {
    objDiv.innerHTML = remaningChar + " characters left";
}
if (remaningChar <= 0) {
    obj.value = obj.value.substring(maxchar, 0);
    if (objDiv.id) {
        objDiv.innerHTML = "0 characters left";
    }
    return false;
}
else
{ return true; }
}

function get_object(id) {
var object = null;
if (document.layers) {
    object = document.layers[id];
} else if (document.all) {
    object = document.all[id];
} else if (document.getElementById) {
    object = document.getElementById(id);
}
return object;
}

function trimEnter(dataStr) {
return dataStr.replace(/(\r\n|\r|\n)/g, "");
}

Коды серверов на главной странице

<script type="text/javascript" src="/JScript.js" ></script>

Коды ASPX, (HTML-коды)

<tr>
<th style="width: 595px; height: 135px;">Official Report :</th>
<td colspan="4" style="height: 135px">
  <asp:TextBox ID="tbofficial" runat="server" Height="121px" TextMode="MultiLine" Width="878px" MaxLength="500"   ToolTip="Summary:(500 characters)" onkeyup="return validateLimit(this, 'lblMsg1', 500)" ></asp:TextBox>
  <div id="lblMsg1">500 characters left</div>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
        ControlToValidate="tbofficial" Display="Dynamic" 
        SetFocusOnError="True">*</asp:RequiredFieldValidator>
  <br />
  <asp:Label ID="lblmsg" runat="server"></asp:Label>
  <br />
  <br />
        <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
  <asp:Button ID="btnClear" runat="server" Text="Clear" OnClick="btnClear_Click" />
        </td>
</tr>
  • 8
    У вас есть много ответов с большим количеством голосов здесь, если один из них ответил на ваш вопрос, было бы полезно для других пользователей, если вы отметите его как ответ.
Теги:
visual-studio
word-count

8 ответов

453
Лучший ответ

Для включения режима проверки pre 4.5 вам понадобится ключ web.config.

Дополнительная информация о ValidationSettings: UnobtrusiveValidationMode:

Определяет, как ASP.NET глобально включает встроенные элементы проверки валидатора использовать ненавязчивый JavaScript для логики проверки на стороне клиента.

Тип: UnobtrusiveValidationMode

Значение по умолчанию: None

Примечания. Если для этого значения ключа установлено значение "Нет" [по умолчанию], ASP.NET приложение будет использовать поведение pre-4.5 (встроенный JavaScript страницы) для логики проверки на стороне клиента. Если установлено это значение ключа "WebForms" , ASP.NET использует атрибуты данных HTML5 и поздние ограничения JavaScript из добавленной ссылки script для проверки на стороне клиента логика.

Пример:

    <appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    </appSettings>
  • 11
    Почему это даже проблема ... Почему это нельзя просто отключить по умолчанию? Кто бы вообще хотел, чтобы это было включено? Безотносительно ответов я добавил этот ключ, и я все еще получаю ошибку ...
  • 37
    Кажется, «None» не является значением по умолчанию, если вы используете targetFramework="4.5" . Я должен был явно добавить этот параметр в мой web.config, чтобы он работал.
Показать ещё 7 комментариев
132

Вместо отключения новой функции я решил следовать инструкциям ошибки. В моем global.asax.cs я добавил:

protected void Application_Start(object sender, EventArgs e)
{
    string JQueryVer = "1.7.1";
    ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
    {
        Path = "~/Scripts/jquery-" + JQueryVer + ".min.js",
        DebugPath = "~/Scripts/jquery-" + JQueryVer + ".js",
        CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
        CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
        CdnSupportsSecureConnection = true,
        LoadSuccessExpression = "window.jQuery"
    });
}

Это происходит из сообщения msdn blog, в котором подчеркиваются некоторые преимущества сопоставлений ресурсов script. Особый интерес для меня представлял собой централизованный контроль над доставкой файлов script на основе "debug = true", EnableCDN и т.д.

  • 15
    Удивлен это не имеет больше голосов. В то время как принятый ответ избавляет от ошибки, я бы назвал это «ответом».
  • 0
    @b_levitt Я новичок в .NET и нашел решение, которое вы упомянули. Это действительно очень помогло, но просто любопытно, как я могу вызвать функцию jQuery. Например, у меня есть меню jQuery, и после реализации вышеуказанного метода я использую <script type='text/javascript'> //<![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] </script> . Это правильный подход?
Показать ещё 4 комментария
73

Существует как минимум три способа отключить использование ненавязчивого JavaScript для проверки на стороне клиента:

  • Добавьте в файл web.config следующее:
    <configuration>
      <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
      </appSettings>
    </configuration>
  • Задайте значение статического свойства System.Web.UI.ValidationSettings.UnobtrusiveValidationMode для System.Web.UI.UnobtrusiveValidationMode.None
  • Задайте значение свойства экземпляра System.Web.UI.Page.UnobtrusiveValidationMode для System.Web.UI.UnobtrusiveValidationMode.None

Чтобы отключить функциональность для каждой страницы, я предпочитаю устанавливать свойство Page.UnobtrusiveValidationMode с помощью директивы page:

<%@ Page Language="C#" UnobtrusiveValidationMode="None" %>
  • 7
    Приятный звонок на постраничную настройку.
39

Ненавязчивая проверка включена по умолчанию в новой версии ASP.NET. Ненавязчивая проверка направлена ​​на уменьшение размера страницы путем замены встроенного JavaScript для выполнения проверки с помощью небольшой библиотеки JavaScript, которая использует jQuery.

Вы можете отключить его, отредактировав файл web.config, чтобы включить следующее:

<appSettings>
  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

Или еще лучше настроить его, изменив метод Application_Start в global.asax:

void Application_Start(object sender, EventArgs e) 
{
    RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
    ScriptManager.ScriptResourceMapping.AddDefinition("jquery",
        new ScriptResourceDefinition
        {
            Path = "/~Scripts/jquery-2.1.1.min.js"
        }
    );
}

Страница 399 of Beginning ASP.NET 4.5.1 в С# и VB содержит обсуждение преимуществ ненавязчивой проверки и пошаговое руководство для ее настройки.

Для тех, кто ищет RouteConfig. Он добавляется автоматически при создании нового проекта в visual studio в папку App_Code. Содержимое выглядит примерно так:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Routing;
using Microsoft.AspNet.FriendlyUrls;

namespace @default
{
    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Permanent;
            routes.EnableFriendlyUrls(settings);
        }
    }
}
  • 0
    Откуда приходит RouteConfig?
  • 0
    @Lucas Когда вы создаете новый проект в Visual Studio, он добавляет RouteConfig.cs в папку App_Code. Смотрите отредактированный ответ.
9

Я считаю, что столкнулся с одним и тем же затруднением. Я начал сталкиваться с проблемой, когда изменился на:

</system.web>
<httpRuntime targetFramework="4.5"/>

Что дает сообщение об ошибке, описанное выше.

добавление:

<appSettings>
  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />

Решает проблему, , но затем она заставляет ваши проверки/сценарии запускать ошибки времени выполнения Javascript. Если вы измените на:

</system.web>
<httpRuntime targetFramework="4.0"/>

Вы должны быть в порядке, , но вы должны убедиться, что остальная часть вашего кода делает/ведет себя по желанию. Возможно, вам также придется отказаться от некоторых новых функций, доступных только в версии 4.5.

P.S. Перед реализацией этого решения настоятельно рекомендуется прочитать следующее. Особенно, если вы используете функции Async:

https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/

ОБНОВЛЕНИЕ Апрель 2017: После некоторых экспериментов и тестирования я придумал комбинацию, которая работает:

<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
<httpRuntime targetFramework="4.5.1" />

с:

версия jQuery 1.11.3

  • 0
    Большой! Именно то, что случилось со мной.
8

добавить немного больше ответа от b_levitt... на global.asax:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.UI;

namespace LoginPage
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            string JQueryVer = "1.11.3";
            ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
            {
                Path = "~/js/jquery-" + JQueryVer + ".min.js",
                DebugPath = "~/js/jquery-" + JQueryVer + ".js",
                CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
                CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
                CdnSupportsSecureConnection = true,
                LoadSuccessExpression = "window.jQuery"
            });
        }
    }
}

на вашем default.aspx

<body>
   <form id="UserSectionForm" runat="server">
     <asp:ScriptManager ID="ScriptManager" runat="server">
          <Scripts>
               <asp:ScriptReference Name="jquery" />
          </Scripts>
     </asp:ScriptManager>
     <%--rest of your markup goes here--%>         
   </form>
</body>
7

Проблема возникла из-за проверки валидатора. Просто добавьте ссылку J Query на свою веб-страницу следующим образом, а затем добавьте параметры проверки в файл web.config, чтобы устранить эту проблему. Я тоже столкнулся с той же проблемой, и ниже я дал решение моей проблемы.

Шаг 1:

Изображение 5964

Шаг 2:

Изображение 5965

Он решит вашу проблему.

1

Если ваш код или конфигурация выглядят правильно после просмотра других ответов, у меня также возникла эта проблема с развернутым веб-сайтом разработки (разработки), и выяснилось, что проблема в том, что файл Global.asax был переименован. (По мне, несколько дней назад, когда вы возились с customErrors и Application_Error)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню