O WebForms UnobtrusiveValidationMode requer um ScriptResourceMapping para 'jquery'. Adicione um ScriptResourceMapping chamado jquery (diferencia maiúsculas de minúsculas)


305

Estou criando um aplicativo Web usando o Visual Studio 2012. Estou tentando adicionar a contagem de palavras à minha caixa de texto. No entanto, após adicionar os códigos javascript e os códigos html. Eu recebo o erro como indicado acima.

Aqui estão os meus códigos javascript

Código:

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, "");
}

Códigos de servidor na página mestra

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

Códigos ASPX, (códigos 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>

Respostas:


576

Você precisa de uma chave web.config para ativar o modo de validação anterior ao 4.5.

Mais informações sobre ValidationSettings: UnobtrusiveValidationMode :

Especifica como o ASP.NET globalmente permite que os controles do validador interno usem JavaScript discreto para lógica de validação do lado do cliente.

Tipo: UnobtrusiveValidationMode

Valor padrão: Nenhum

Comentários: Se esse valor da chave estiver definido como "Nenhum" [padrão], o aplicativo ASP.NET usará o comportamento anterior à 4.5 (JavaScript embutido nas páginas) para a lógica de validação do lado do cliente. Se esse valor da chave for definido como "WebForms" , o ASP.NET usará atributos de dados HTML5 e JavaScript vinculado tardiamente a partir de uma referência de script adicionada para a lógica de validação do lado do cliente.

Exemplo:

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

14
Por que isso é um problema ... Por que isso não pode ser desativado por padrão? Quem iria querer isso ativado de qualquer maneira? Quaisquer que sejam as respostas, eu adicionei esta chave e ainda estou recebendo o erro ...
Ortund

40
Parece que "Nenhum" não é o padrão se você estiver usando targetFramework="4.5". Eu tive que adicionar explicitamente essa configuração ao meu web.config para que ele funcionasse.
Jesse Webb

18
Lembrete: <appSettings> pai no arquivo web.Config deve ser o elemento raiz, que é <configuração>.
GY

4
Instalei o .Net 4.5.2 e entrei nesse problema. Presumo que a atualização do Windows para 4.5.2 alterou a configuração da máquina.
Rez.Net

3
Por que você desativaria a validação discreta, a menos que esteja tentando vencer uma competição de "maior tamanho de página"?
EKW

173

Em vez de desativar um novo recurso, optei por seguir as instruções do erro. No meu global.asax.cs, adicionei:

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"
    });
}

Isso vem de uma postagem no blog msdn, que destaca algumas das vantagens dos mapeamentos de recursos de script. De particular interesse para mim, foi o controle centralizado sobre a entrega dos arquivos de script com base em "debug = true", EnableCDN, etc.


@b_levitt Eu sou um novato no .NET e vim através da solução que você mencionou. De fato, ajudou bastante, mas apenas curiosamente, como posso chamar a função jQuery. Por exemplo, eu tenho um menu jQuery e depois de implementar o método acima, estou usando <script type='text/javascript'> //<![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] </script>. Essa é a abordagem correta?
Yashman Gupta

8
Criou uma lista essencial: gist.github.com/monoman/ca42e54cdac25ef2284b melhorando não codificando o valor jQueryVer;
Monoman 27/10

6
NOTA: Adicionei esses dois pacotes Nuget e as coisas correram bem. tinha que copiar novos arquivos na pasta / bin para servidor de produção .. nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h

1
Depende do seu caso de uso, qual deles está correto. Nosso aplicativo não tem nenhuma validação (entrega puramente de conteúdo) e preferimos desativar tudo.
Samantha Branham

93

Há pelo menos três maneiras de desativar o uso de JavaScript discreto para validação do lado do cliente:

  1. Adicione o seguinte ao arquivo web.config:
    <configuration>
      <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
      </appSettings>
    </configuration>
  2. Defina o valor da System.Web.UI.ValidationSettings.UnobtrusiveValidationModepropriedade estática comoSystem.Web.UI.UnobtrusiveValidationMode.None
  3. Defina o valor da System.Web.UI.Page.UnobtrusiveValidationModepropriedade da instância comoSystem.Web.UI.UnobtrusiveValidationMode.None

Para desativar a funcionalidade por página, prefiro definir a Page.UnobtrusiveValidationModepropriedade usando a diretiva de página:

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

7
Boa chamada na configuração por página.
Brendan Hannemann

47

A validação discreta é ativada por padrão na nova versão do ASP.NET. A validação discreta visa diminuir o tamanho da página, substituindo o JavaScript embutido para executar a validação por uma pequena biblioteca JavaScript que usa jQuery.

Você pode desativá-lo editando web.config para incluir o seguinte:

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

Ou melhor ainda, configure-o adequadamente, modificando o método Application_Start em 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"
        }
    );
}

Página 399 de Início O ASP.NET 4.5.1 em C # e VB fornece uma discussão sobre os benefícios da validação discreta e uma explicação passo a passo para configurá-lo.

Para quem procura RouteConfig. Ele é adicionado automaticamente quando você cria um novo projeto no visual studio na pasta App_Code. O conteúdo é mais ou menos assim:

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);
        }
    }
}

De onde vem o RouteConfig?
Lucas

@ Lucas Quando você cria um novo projeto com o visual studio, ele adiciona RouteConfig.cs à pasta App_Code. Veja a resposta editada.
Denver #

12

para adicionar um pouco mais à resposta de b_levitt ... no 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"
            });
        }
    }
}

no seu 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>

12

Acredito que encontrei o mesmo dilema. Comecei a encontrar o problema quando mudei para:

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

O que fornece a mensagem de erro que você descreve acima.

adicionando:

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

Resolve o problema, mas faz com que seus controles / scripts de validação gerem erros de tempo de execução do Javascript. Se você mudar para:

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

Você deve estar bem, mas precisará garantir que o restante do seu código se comporte conforme desejado. Talvez você precise renunciar a alguns novos recursos disponíveis apenas no 4.5 em diante.

PS É altamente recomendável que você leia o seguinte antes de implementar esta solução. Especialmente, se você usar a funcionalidade assíncrona:

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

ATUALIZAÇÃO abril de 2017: Depois de algumas experimentações e testes, criei uma combinação que funciona:

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

com:

jQuery versão 1.11.3


6

O problema ocorreu devido ao validador de controle. Basta adicionar a referência de consulta J à sua página da web da seguinte maneira e, em seguida, adicione as configurações de validação no seu arquivo web.config para solucionar o problema. Eu também enfrentei o mesmo problema e o abaixo deu a solução para o meu problema.

Passo 1:

Código a ser adicionado na página da web

Passo 2 :

Código a ser adicionado no arquivo Web.config

Isso resolverá o seu problema.


Por que você deve adicionar o Jquery depois de definir UnobtrusiveValidationMode como none?
Ashin

0

Ele tem 3 soluções que outros caras disseram para o superior ... mas quando tenta a solução Application_Start, minha outra biblioteca jQuery como Pickup_Date_and_Time não funciona ... então eu testei de segunda maneira e ele respondeu: 1- defina o Target FrameWork como Pre 4.5 2 - Use "UnobtrusiveValidationMode =" None "" no cabeçalho da sua página =>

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

funciona para mim e não interrompe minha outra função jQuery.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.