WebForms UnobtrusiveValidationMode membutuhkan ScriptResourceMapping untuk 'jquery'. Silakan tambahkan jquery ScriptResourceMapping bernama (case-sensitive)

305

Saya sedang membangun aplikasi web menggunakan Visual Studio 2012. Saya mencoba untuk menambahkan jumlah kata ke dalam kotak teks saya. Namun setelah menambahkan kode javascript dan kode html. Saya menerima kesalahan seperti yang disebutkan di atas.

Ini kode javascript saya

Kode:

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

Kode server di halaman master

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

Kode ASPX, (kode 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>
Teo Chuen Wei Bryan
sumber

Jawaban:

576

Anda memerlukan kunci web.config untuk mengaktifkan mode validasi pra 4.5.

Info Lebih Lanjut tentang ValidationSettings: UnobtrusiveValidationMode :

Menentukan bagaimana ASP.NET secara global memungkinkan kontrol validator bawaan untuk menggunakan JavaScript yang tidak mengganggu untuk logika validasi sisi klien.

Ketik: UnobtrusiveValidationMode

Nilai default: Tidak ada

Keterangan: Jika nilai kunci ini disetel ke "None" [default], aplikasi ASP.NET akan menggunakan perilaku pra-4.5 (JavaScript inline di halaman) untuk logika validasi sisi klien. Jika nilai kunci ini disetel ke "WebForms" , ASP.NET menggunakan atribut data HTML5 dan JavaScript terikat akhir dari referensi skrip yang ditambahkan untuk logika validasi sisi klien.

Contoh:

    <appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    </appSettings>
ericdc
sumber
14
Mengapa ini bahkan merupakan masalah ... Mengapa ini tidak bisa dinonaktifkan begitu saja secara default? Lagi pula, siapa yang mau ini diaktifkan? Apa pun jawabannya, saya menambahkan kunci ini dan saya masih mendapatkan kesalahan ...
Ortund
40
Tampaknya "Tidak Ada" bukan default jika Anda menggunakan targetFramework="4.5". Saya harus menambahkan pengaturan ini secara eksplisit ke web.config saya agar bisa berfungsi.
Jesse Webb
18
Pengingat: orang tua <appSettings> di web.Config file harus menjadi elemen root, yaitu <configuration>.
GY
4
Saya menginstal .Net 4.5.2 dan kemudian saya jatuh ke masalah ini. Saya menganggap pembaruan windows untuk 4.5.2 mengubah konfigurasi mesin.
Rez.Net
3
Mengapa Anda menonaktifkan validasi yang tidak mencolok kecuali Anda mencoba memenangkan kompetisi "ukuran halaman terbesar"?
EKW
173

Daripada menonaktifkan fitur baru, saya memilih untuk mengikuti instruksi kesalahan. Di global.asax.cs saya menambahkan:

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

Ini berasal dari posting blog msdn yang menyoroti beberapa keuntungan dari pemetaan sumber daya skrip. Yang menarik bagi saya adalah kontrol terpusat atas pengiriman file skrip berdasarkan "debug = true", EnableCDN, dll.

b_levitt
sumber
@ b_levitt Saya agak baru ke. NET dan datang melalui solusi yang Anda sebutkan. Memang banyak membantu tetapi hanya ingin tahu bagaimana saya bisa memanggil fungsi jQuery. Sebagai contoh, saya memiliki menu jQuery dan setelah menerapkan metode di atas saya gunakan <script type='text/javascript'> //<![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] </script>. Apakah ini pendekatan yang benar?
Yashman Gupta
8
Dibuat intisari: gist.github.com/monoman/ca42e54cdac25ef2284b membaik dengan tidak melakukan hardcoding nilai jQueryVer;
Monoman
6
CATATAN: Saya menambahkan dua paket Nuget ini dan semuanya berjalan lancar. harus menyalin file baru di folder / bin ke server produksi .. nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h
1
Tergantung pada use case Anda mana yang benar. Aplikasi kami tidak memiliki validasi apa pun (pengiriman konten murni) dan kami lebih suka mematikan semuanya.
Samantha Branham
93

Setidaknya ada tiga cara untuk menonaktifkan penggunaan JavaScript yang tidak mencolok untuk validasi sisi klien:

  1. Tambahkan berikut ini ke file web.config:
    <configuration>
      <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
      </appSettings>
    </configuration>
  2. Setel nilai System.Web.UI.ValidationSettings.UnobtrusiveValidationModeproperti statis keSystem.Web.UI.UnobtrusiveValidationMode.None
  3. Tetapkan nilai System.Web.UI.Page.UnobtrusiveValidationModeproperti instance keSystem.Web.UI.UnobtrusiveValidationMode.None

Untuk menonaktifkan fungsi berdasarkan per halaman, saya lebih suka mengatur Page.UnobtrusiveValidationModeproperti menggunakan arahan halaman:

<%@ Page Language="C#" UnobtrusiveValidationMode="None" %>
Ryan Prechel
sumber
7
Panggilan bagus pada pengaturan per halaman.
Brendan Hannemann
47

Validasi tidak mengganggu diaktifkan secara default di versi baru ASP.NET. Validasi tidak mengganggu bertujuan untuk mengurangi ukuran halaman dengan mengganti JavaScript sebaris untuk melakukan validasi dengan perpustakaan JavaScript kecil yang menggunakan jQuery.

Anda dapat menonaktifkannya dengan mengedit web.config untuk memasukkan yang berikut:

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

Atau lebih baik lagi mengkonfigurasi dengan benar dengan memodifikasi metode Application_Start di 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"
        }
    );
}

Halaman 399 dari Awal ASP.NET 4.5.1 dalam C # dan VB menyediakan diskusi tentang manfaat validasi yang tidak mengganggu dan langkah-langkah untuk mengonfigurasinya.

Bagi mereka yang mencari RouteConfig. Itu ditambahkan secara otomatis ketika Anda membuat proyek baru di studio visual ke folder App_Code. Isi terlihat seperti ini:

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);
        }
    }
}
denver
sumber
Dari mana datangnya RouteConfig?
Lucas
@Lucas Ketika Anda membuat proyek baru dengan studio visual itu menambahkan RouteConfig.cs ke folder App_Code. Lihat jawaban yang diedit.
denver
12

untuk menambahkan sedikit lebih banyak ke jawaban dari b_levitt ... di 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"
            });
        }
    }
}

di default.aspx Anda

<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>
BernieSF
sumber
12

Saya yakin saya pernah mengalami kesulitan yang sama. Saya mulai menemui masalah ketika saya berubah ke:

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

Yang memberikan pesan kesalahan yang Anda uraikan di atas.

menambahkan:

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

Memecahkan masalah, tetapi kemudian membuat kontrol / skrip validasi Anda membuang kesalahan runtime Javascript. Jika Anda berubah menjadi:

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

Kamu harus baik-baik saja, tetapi Anda harus memastikan bahwa sisa kode Anda sesuai dengan yang diinginkan. Anda mungkin juga harus melupakan beberapa fitur baru yang hanya tersedia pada 4,5 dan seterusnya.

PS Sangat disarankan agar Anda membaca yang berikut sebelum menerapkan solusi ini. Terutama, jika Anda menggunakan fungsi Async:

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

UPDATE April 2017: Setelah beberapa percobaan dan pengujian, saya menemukan kombinasi yang berfungsi:

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

dengan:

jQuery versi 1.11.3

DaniDev
sumber
6

Masalah terjadi karena validator Kontrol. Cukup tambahkan referensi J Query ke halaman web Anda sebagai berikut dan kemudian tambahkan Pengaturan Validasi di file web.config Anda untuk mengatasi masalah tersebut. Saya juga menghadapi masalah yang sama dan di bawah ini memberikan solusi untuk masalah saya.

Langkah 1:

Kode akan ditambahkan di halaman web

Langkah 2 :

Kode yang akan ditambahkan dalam file Web.config

Itu akan menyelesaikan masalah Anda.

Ivan
sumber
Mengapa Anda harus menambahkan Jquery setelah mengatur UnobtrusiveValidationMode ke none?
Ashin
0

Ini memiliki 3 solusi yang dikatakan orang lain di atas ... tetapi ketika mencoba solusi Application_Start, pustaka jQuery saya yang lain seperti Pickup_Date_and_Time tidak berfungsi ... jadi saya menguji cara kedua dan dijawab: 1- mengatur Target FrameWork ke Pre 4.5 2 - Gunakan "UnobtrusiveValidationMode =" None "" di header halaman Anda =>

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

ini bekerja untuk saya dan tidak mengganggu fungsi jQuery saya yang lain.

Ata Hoseini
sumber