WebForms UnobtrusiveValidationMode ต้องใช้ ScriptResourceMapping สำหรับ 'jquery' โปรดเพิ่ม ScriptResourceMapping ชื่อ jquery (คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่)


305

ฉันกำลังสร้างเว็บแอปพลิเคชันโดยใช้ Visual Studio 2012 ฉันกำลังพยายามเพิ่มจำนวนคำลงในกล่องข้อความของฉัน อย่างไรก็ตามหลังจากเพิ่มรหัส javascript และรหัส html ฉันได้รับข้อผิดพลาดตามที่ระบุไว้ข้างต้น

นี่คือจาวาสคริปต์ของฉัน

รหัส:

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

ข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าการตรวจสอบความถูกต้อง: UnobtrusiveValidationMode :

ระบุว่า ASP.NET เปิดใช้งานการควบคุมตัวตรวจสอบความถูกต้องในตัวทั่วโลกอย่างไรเพื่อใช้งาน JavaScript ที่ไม่สร้างความรำคาญสำหรับตรรกะการตรวจสอบความถูกต้องของฝั่งไคลเอ็นต์

ประเภท: UnobtrusiveValidationMode

ค่าเริ่มต้น: ไม่มี

ข้อสังเกต: หากค่าคีย์นี้ถูกตั้งค่าเป็น"ไม่มี" [ค่าเริ่มต้น] แอปพลิเคชัน ASP.NET จะใช้พฤติกรรมก่อน 4.5 (JavaScript แบบอินไลน์ในหน้า) สำหรับตรรกะการตรวจสอบฝั่งไคลเอ็นต์ หากค่าคีย์นี้ถูกตั้งค่าเป็น"WebForms" ASP.NET จะใช้แอตทริบิวต์ข้อมูล HTML5 และ JavaScript ที่ถูกผูกไว้ล่าช้าจากการอ้างอิงสคริปต์ที่เพิ่มเข้ามาสำหรับตรรกะการตรวจสอบฝั่งไคลเอ็นต์

ตัวอย่าง:

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

14
ทำไมถึงเป็นปัญหา ... ทำไมค่าเริ่มต้นนี้ถึงปิดไม่ได้ ใครบ้างที่ต้องการเปิดใช้งานสิ่งนี้ ไม่ว่าคำตอบที่ผมเพิ่มคีย์นี้และฉันยังคงได้รับข้อผิดพลาด ...
Ortund

40
ดูเหมือนว่า "ไม่มี" คือไม่ได้targetFramework="4.5"เริ่มต้นถ้าคุณกำลังใช้ ฉันต้องเพิ่มการตั้งค่านี้ใน web.config ของฉันอย่างชัดเจนเพื่อให้สามารถใช้งานได้
Jesse Webb

18
คำเตือน: ผู้ปกครอง <appSettings> ในไฟล์ web.Config ควรเป็นองค์ประกอบหลักนั่นคือ <configuration>
GY

4
ฉันติดตั้ง. Net 4.5.2 แล้วฉันก็พบปัญหานี้ ฉันถือว่าการอัพเดท windows สำหรับ 4.5.2 เปลี่ยนการกำหนดค่าเครื่อง
Rez.Net

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>และหลังจากการใช้วิธีการข้างต้นผมใช้ นี่เป็นวิธีที่ถูกต้องหรือไม่?
Yashman Gupta

8
สร้างส่วนสำคัญ: gist.github.com/monoman/ca42e54cdac25ef2284bปรับปรุงโดยไม่เข้ารหัสรหัส jQueryVer
Monoman

6
หมายเหตุ: ฉันได้เพิ่มแพ็คเกจ Nuget ทั้งสองและทุกอย่างราบรื่น ต้องคัดลอกไฟล์ใหม่ในโฟลเดอร์ bin / ไปยังเซิร์ฟเวอร์การผลิต .. nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h

1
ขึ้นอยู่กับกรณีการใช้งานของคุณว่าอันไหนถูกต้อง แอปของเราไม่มีการตรวจสอบความถูกต้องใด ๆ (การส่งเนื้อหาล้วน ๆ ) และเราต้องการปิดใช้งานทั้งหมด
Samantha Branham

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
โทรดีในการตั้งค่าต่อหน้า
Brendan Hannemann

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 ของการเริ่มต้น ASP.NET 4.5.1 ใน C # และ 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);
        }
    }
}

RouteConfig มาจากไหน
Lucas

@Lucas เมื่อคุณสร้างโครงการใหม่ด้วย visual studio มันจะเพิ่ม 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"
            });
        }
    }
}

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

ฉันเชื่อว่าฉันได้พบกับความไม่แน่ใจที่เหมือนกัน ฉันเริ่มพบปัญหาเมื่อเปลี่ยนเป็น:

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

ซึ่งให้ข้อความแสดงข้อผิดพลาดที่คุณอธิบายข้างต้น

เพิ่ม:

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

แก้ไขปัญหาแต่ทำให้การควบคุม / สคริปต์การตรวจสอบความถูกต้องของคุณเกิดข้อผิดพลาดรันไทม์ Javascript หากคุณเปลี่ยนเป็น:

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

คุณควรจะโอเคแต่คุณต้องแน่ใจว่าส่วนที่เหลือของรหัสของคุณทำงานได้ตามที่ต้องการ คุณอาจต้องละทิ้งคุณสมบัติใหม่บางอย่างที่มีอยู่ใน 4.5 เป็นต้นไปเท่านั้น

ป.ล. ขอแนะนำอย่างยิ่งให้คุณอ่านข้อมูลต่อไปนี้ก่อนที่จะใช้โซลูชันนี้ โดยเฉพาะถ้าคุณใช้ฟังก์ชัน Async:

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

UPDATE เมษายน 2560: หลังจากการทดลองและการทดสอบฉันมีชุดค่าผสมที่ใช้งานได้:

<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 เป็น none
Ashin

0

มี 3 โซลูชั่นที่ผู้ชายคนอื่นบอกบน ... แต่เมื่อลองใช้โซลูชัน Application_Start ห้องสมุด jQuery อื่น ๆ ของฉันเช่น Pickup_Date_and_Time ไม่ทำงาน ... ดังนั้นฉันจึงทดสอบวิธีที่สองและตอบว่า: 1- ตั้ง Target FrameWork เป็น Pre 4.5 2 - ใช้ "UnobtrusiveValidationMode =" None "" ในส่วนหัวของหน้าของคุณ =>

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

มันใช้งานได้สำหรับฉันและไม่รบกวนฟังก์ชั่น jQuery อื่น ๆ ของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.