WebForms UnobtrusiveValidationMode 'jquery' için bir ScriptResourceMapping gerektirir. Lütfen jquery adında bir ScriptResourceMapping ekleyin (büyük / küçük harfe duyarlı)


305

Visual Studio 2012 kullanarak bir web uygulaması inşa ediyorum. Metin kutuma kelime sayısı eklemeye çalışıyorum. Ancak javascript kodlarını ve html kodlarını ekledikten sonra. Yukarıda belirtilen hatayı alıyorum.

İşte benim javascript kodlarım

Kod:

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

Kalıp sayfadaki sunucu kodları

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

ASPX kodları, (Html ​​kodları)

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

Yanıtlar:


576

4.5 öncesi doğrulama modunu etkinleştirmek için bir web.config anahtarına ihtiyacınız vardır.

ValidationSettings Hakkında Daha Fazla Bilgi : UnobtrusiveValidationMode :

ASP.NET'in yerleşik doğrulayıcı denetimlerinin istemci tarafı doğrulama mantığı için göze batmayan JavaScript kullanmasını genel olarak nasıl sağladığını belirtir.

Tür: UnobtrusiveValidationMode

Varsayılan değer: Yok

Açıklamalar: Bu anahtar değeri "Yok" [varsayılan] olarak ayarlanırsa , ASP.NET uygulaması istemci tarafı doğrulama mantığı için 4.5 öncesi davranışı (sayfalarda JavaScript satır içi) kullanır. Bu anahtar değeri "WebForms" olarak ayarlanırsa , ASP.NET, istemci tarafı doğrulama mantığı için eklenen bir komut dosyası başvurusundan HTML5 veri özniteliklerini ve geç bağlı JavaScript'i kullanır .

Misal:

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

14
Bu neden bir sorun olsa bile ... Bu varsayılan olarak neden devre dışı bırakılamadı? Bunun kimin etkinleştirilmesini istesin ki? Cevaplar ne olursa olsun, bu anahtarı ekledim ve hala hatayı alıyorum ...
Ortund

40
Görünüşe göre "Hiçbiri" kullanıyorsanız varsayılan değildirtargetFramework="4.5" . Çalışması için açıkça bu ayarı web.config dosyasına eklemek zorunda kaldım.
Jesse Webb

18
Hatırlatma: web.Config dosyasındaki <appSettings> üst öğesi, <configuration> kök öğesi olmalıdır.
GY

4
Net 4.5.2'yi yükledim ve sonra bu konuya düştüm. 4.5.2 için windows güncellemesinin makine yapılandırmasını değiştirdiğini varsayıyorum.
Rez.Net

3
"En büyük sayfa boyutu" yarışmasını kazanmaya çalışmadığınız sürece neden göze çarpmayan doğrulamayı devre dışı bırakasınız?
EKW

173

Yeni bir özelliği devre dışı bırakmak yerine, hatanın talimatlarını izlemeyi seçtim. Global.asax.cs dosyama ekledim:

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

Bu , komut dosyası kaynak eşlemelerinin bazı avantajlarını vurgulayan bir msdn blog gönderisinden gelir . Benim için özellikle ilgi çekici olan, "debug = true", EnableCDN, vb.


@b_levitt Ben .NET için yeni bir tür ve bahsettiğiniz çözüm geldi. Gerçekten çok yardımcı oldu ama sadece nasıl jQuery işlevini çağırabilirim merak ediyorum. Örneğin, bir jQuery menü var ve yukarıdaki yöntemi kullandıktan sonra kullanıyorum <script type='text/javascript'> //<![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] </script>. Bu doğru bir yaklaşım mı?
Yashman Gupta

8
Bir gist oluşturuldu: gist.github.com/monoman/ca42e54cdac25ef2284b jQueryVer değerini kodlamamak suretiyle iyileştirme;
Monoman

6
NOT: Bu iki Nuget paketini ekledim ve işler düzgün gitti. / bin klasöründeki yeni dosyaları üretim sunucusuna kopyalamak zorunda .. nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h 12:15

1
Hangisinin doğru olduğuna bağlı olarak kullanım durumunuza bağlıdır. Bizim app hiçbir doğrulama (tamamen içerik teslimi) vardır ve biz hepsini kapatmayı tercih etti.
Samantha Branham

93

İstemci tarafı doğrulaması için göze batmayan JavaScript kullanımını devre dışı bırakmanın en az üç yolu vardır:

  1. Aşağıdakileri web.config dosyasına ekleyin:
    <configuration>
      <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
      </appSettings>
    </configuration>
  2. System.Web.UI.ValidationSettings.UnobtrusiveValidationModeStatik özelliğin değerini şu şekilde ayarlayın:System.Web.UI.UnobtrusiveValidationMode.None
  3. Değerini ayarlayın System.Web.UI.Page.UnobtrusiveValidationModeörneği özelliğineSystem.Web.UI.UnobtrusiveValidationMode.None

İşlevleri sayfa başına devre dışı bırakmak için Page.UnobtrusiveValidationModeözelliği sayfa yönergesini kullanarak ayarlamayı tercih ederim :

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

7
Sayfa başına ayar güzel çağrı.
Brendan Hannemann

47

ASP.NET'in yeni sürümünde göze çarpmayan doğrulama varsayılan olarak etkindir. Göze çarpmayan doğrulama, doğrulama yapmak için satır içi JavaScript'i jQuery kullanan küçük bir JavaScript kitaplığıyla değiştirerek sayfa boyutunu küçültmeyi amaçlamaktadır.

Aşağıdakileri içermek için web.config dosyasını düzenleyerek devre dışı bırakabilirsiniz:

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

Veya daha iyisi, global.asax'taki Application_Start yöntemini değiştirerek doğru şekilde yapılandırın:

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

Sayfa 399 / C # ve VB'de ASP.NET 4.5.1, göze batmayan doğrulama ve yapılandırma için izlenecek yol hakkında bir tartışma sağlar.

RouteConfig'i arayanlar için. Visual Studio'da App_Code klasörüne yeni bir proje yaptığınızda otomatik olarak eklenir. İçeriği şuna benzer:

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 nereden geliyor?
Lucas

@Lucas Visual studio ile yeni bir proje oluşturduğunuzda, App_Code klasörüne RouteConfig.cs ekler. Düzenlenmiş cevaba bakınız.
denver

12

global.asax sitesindeki b_levitt ... yanıtına biraz daha eklemek için:

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>

12

Aynı problemle karşılaştığımı düşünüyorum. Şu şekilde değiştirdiğimde sorunla karşılaşmaya başladım:

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

Bu, yukarıda açıkladığınız hata mesajını verir.

ekleme:

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

Sorunu çözer, ancak doğrulama denetimlerinizin / komut dosyalarınızın Javascript çalışma zamanı hatalarını atmasını sağlar. Olarak değiştirirseniz:

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

İyi olmalısınız, ancak kodunuzun geri kalanının istediğiniz gibi çalıştığından / davrandığından emin olmanız gerekir . Ayrıca yalnızca 4.5'ten sonraki bazı yeni özelliklerden vazgeçmeniz gerekebilir.

Not: Bu çözümü uygulamadan önce aşağıdakileri okumanız önemle tavsiye edilir. Özellikle, Async işlevini kullanıyorsanız:

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

GÜNCELLEŞTİRME Nisan 2017: Bazı deneme ve testlerden sonra çalışan bir kombinasyon oluşturdum:

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

ile:

jQuery sürüm 1.11.3


6

Sorun Denetim doğrulayıcı nedeniyle oluştu. J Sorgu referansını aşağıdaki gibi web sayfanıza ekleyin ve ardından sorunun üstesinden gelmek için web.config dosyanıza Doğrulama Ayarları'nı ekleyin. Ben de aynı sorunla karşı karşıya kaldım ve aşağıda benim sorunuma çözüm verdi.

Aşama 1:

Web sayfasına eklenecek kod

Adım 2 :

Web.config dosyasına eklenecek kod

Sorununuzu çözecektir.


UnobtrusiveValidationMode öğesini none olarak ayarladıktan sonra neden Jquery eklemelisiniz?
Ashin

0

Diğer adamların üst söylediği 3 çözüm var ... ama Application_Start çözümünü denediğimde, Pickup_Date_and_Time gibi diğer jQuery kütüphanem çalışmıyor ... bu yüzden ikinci yolu test ediyorum ve cevaplandı: 1- Target FrameWork'u Pre 4.5 2 olarak ayarlayın - Sayfa başlığınızda "UnobtrusiveValidationMode =" None "" kullanın =>

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

benim için çalışıyor ve diğer jQuery işlevimi bozmuyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.