WebForms UnobtrusiveValidationMode вимагає ScriptResourceMapping для 'jquery'. Додайте ScriptResourceMapping на ім'я jquery (залежно від регістру)


305

Я будую веб-додаток за допомогою 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="js/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>

Відповіді:


576

Вам потрібен ключ web.config, щоб увімкнути режим попередньої перевірки до 4,5.

Детальніше про налаштування валідації: Ненав'язливийValidationMode :

Визначає, як ASP.NET в усьому світі дозволяє вбудованим контролерам валідатора використовувати ненав'язливий JavaScript для логіки перевірки на стороні клієнта.

Тип: ненав’язливийValidationMode

Значення за замовчуванням: Немає

Зауваження: Якщо для цього значення ключа встановлено значення "Немає" [за замовчуванням], програма ASP.NET використовуватиме поведінку попереднього 4.5 (вбудований JavaScript на сторінках) для логіки перевірки на стороні клієнта. Якщо для цього ключового значення встановлено значення "WebForms" , ASP.NET використовує атрибути даних HTML5 та пізньозв'язаний JavaScript з доданої посилання на скрипт для логіки перевірки на стороні клієнта.

Приклад:

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

14
Чому це навіть проблема ... Чому це не можна просто відключити за замовчуванням? Хто б хотів, щоб це все-таки було дозволено? Незалежно від відповідей, я додав цей ключ, і я все ще отримую помилку ...
Ортунд

40
Здається, що "None" не є типовим, якщо ви використовуєте targetFramework="4.5". Мені довелося явно додати це налаштування до своєї web.config, щоб воно працювало.
Джессі Вебб

18
Нагадування: <appSettings> батьків у файлі web.Config повинен бути кореневим елементом, тобто <configuration>.
GY

4
Я встановив .Net 4.5.2, і тоді я потрапив у цю проблему. Я припускаю, що оновлення Windows для 4.5.2 змінило конфігурацію машини.
Рез.Нет

3
Чому б ви відключили ненав’язливу перевірку, якщо ви не намагаєтесь виграти конкурс "найбільший розмір сторінки"?
EKW

173

Замість того, щоб відключити нову функцію, я вирішив дотримуватися вказівок про помилку. У свій 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, в якому висвітлюються деякі переваги відображення ресурсів скрипту. Особливий інтерес для мене викликав централізований контроль над доставкою файлів скриптів на основі "debug = true", EnableCDN тощо.


@b_levitt Я є новим для .NET і прийшов через рішення, яке ви згадали. Це дійсно дуже допомогло, але просто цікаво, як я можу викликати функцію jQuery. Наприклад, у мене є меню jQuery і після впровадження описаного вище методу я використовую <script type='text/javascript'> //<![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] </script>. Це правильний підхід?
Яшман Гупта

8
Створено суть: gist.github.com/monoman/ca42e54cdac25ef2284b, покращуючи не жорстке кодування значення jQueryVer;
Мономан

6
ПРИМІТКА. Я додав ці два пакунки Nuget і все пройшло гладко. довелося скопіювати нові файли у папку / bin на виробничий сервер .. nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h

1
Залежить від випадку використання, який з них правильний. Наш додаток не має жодної перевірки (суто доставка контенту), і ми вважаємо за краще вимкнути його.
Саманта Бранхам

93

Існує щонайменше три способи відключити використання ненав'язливого JavaScript для перевірки на стороні клієнта:

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

Щоб відключити функціональність на основі сторінки, я вважаю за краще встановити Page.UnobtrusiveValidationModeвластивість за допомогою директиви сторінки:

<%@ Page Language="C#" UnobtrusiveValidationMode="None" %>

7
Приємний дзвінок на налаштуваннях на сторінку.
Брендан Ханнеманн

47

Ненав'язлива перевірка увімкнена за замовчуванням у новій версії 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 від Starting ASP.NET 4.5.1 в C # і VB надає дискусію про користь ненав’язливої ​​перевірки та посібник для її налаштування.

Для тих, хто шукає RouteConfig. Він додається автоматично, коли ви робите новий проект у візуальній студії до папки 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);
        }
    }
}

Звідки береться RouteConfig?
Лукас

@Lucas Коли ви створюєте новий проект із візуальною студією, він додає RouteConfig.cs до папки App_Code. Див. Відредаговану відповідь.
денвер

12

щоб додати трохи більше відповіді від 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"
            });
        }
    }
}

за замовчуванням.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>

12

Я вважаю, що зіткнувся з тією самою неприємністю. Я почав стикатися з проблемою, коли змінив:

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

Що дає повідомлення про помилку, яке ви описали вище.

додавання:

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

Вирішує проблему, але потім змушує ваші контролі / сценарії перевірки викидати помилки виконання Javascript. Якщо ви перейдете на:

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

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

PS Настійно рекомендуємо прочитати наступне перед реалізацією цього рішення. Особливо, якщо ви використовуєте функцію 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


6

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

Крок 1:

Код, який потрібно додати на веб-сторінці

Крок 2:

Код, який потрібно додати у файл Web.config

Це вирішить вашу проблему.


Чому слід додавати Jquery після встановлення UnobtrusiveValidationMode до жодного?
Ашин

0

У ньому є три рішення, про які розповіли інші хлопці у верхній частині ... але коли спробувати рішення Application_Start, моя інша бібліотека jQuery, як Pickup_Date_and_Time, не працює ... тому я перевіряю другий спосіб, і на неї відповідають: 1- встановіть цільовий кадр на Pre 4.5 2 - Використовуйте "UnobtrusiveValidationMode =" None "" у заголовку сторінки =>

<%@ Page Title="" Language="C#" 
    MasterPageFile="~/Master/MasteOfHotel.Master" 
    UnobtrusiveValidationMode="None" %>

вона працює для мене і не порушує мою іншу функцію jQuery.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.