WebForms Không phô trươngValidationMode yêu cầu ScriptResourceMapping cho 'jquery'. Vui lòng thêm ScriptResourceMapping có tên jquery (phân biệt chữ hoa chữ thường)


305

Tôi đang xây dựng một ứng dụng web bằng Visual Studio 2012. Tôi đang cố gắng thêm số từ vào hộp văn bản của mình. Tuy nhiên sau khi thêm mã javascript và mã html. Tôi nhận được lỗi như đã nêu ở trên.

Đây là mã javascript của tôi

Mã số:

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

Mã máy chủ trong trang chính

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

Mã ASPX, (mã 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>

Câu trả lời:


576

Bạn cần khóa web.config để bật chế độ xác thực trước 4.5.

Thông tin thêm về Xác thực Cài đặt : Không phô trươngValidationMode :

Chỉ định cách ASP.NET trên toàn cầu cho phép các điều khiển trình xác nhận tích hợp sử dụng JavaScript không phô trương cho logic xác thực phía máy khách.

Loại: Không phô trươngValidationMode

Giá trị mặc định: Không có

Lưu ý: Nếu giá trị khóa này được đặt thành "Không" [mặc định], ứng dụng ASP.NET sẽ sử dụng hành vi tiền 4.5 (dòng JavaScript trong các trang) cho logic xác thực phía máy khách. Nếu giá trị khóa này được đặt thành "WebForms" , ASP.NET sử dụng các thuộc tính dữ liệu HTML5 và JavaScript bị ràng buộc muộn từ một tham chiếu tập lệnh được thêm vào cho logic xác thực phía máy khách.

Thí dụ:

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

14
Tại sao điều này thậm chí là một vấn đề ... Tại sao điều này không thể bị vô hiệu hóa theo mặc định? Ai sẽ muốn điều này được kích hoạt nào? Dù câu trả lời là gì, tôi đã thêm khóa này và tôi vẫn nhận được lỗi ...
Ortund

40
Có vẻ như "Không" không phải là mặc định nếu bạn đang sử dụng targetFramework="4.5". Tôi đã phải thêm rõ ràng cài đặt này vào web.config để nó hoạt động.
Jesse Webb

18
Nhắc nhở: <appSinstall> cha trong tệp web.Config phải là thành phần gốc, đó là <configure>.
GY

4
Tôi đã cài đặt .Net 4.5.2 và sau đó tôi rơi vào vấn đề này. Tôi giả sử bản cập nhật windows cho 4.5.2 đã thay đổi cấu hình máy.
Rez.Net

3
Tại sao bạn lại vô hiệu hóa xác thực không phô trương trừ khi bạn đang cố gắng giành chiến thắng trong cuộc thi "kích thước trang lớn nhất"?
EKW

173

Thay vì vô hiệu hóa một tính năng mới, tôi đã chọn làm theo hướng dẫn của lỗi. Trong global.asax.cs tôi đã thêm:

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

Điều này xuất phát từ một bài đăng trên blog msDN nêu bật một số lợi thế của ánh xạ tài nguyên tập lệnh. Quan tâm đặc biệt đối với tôi là kiểm soát tập trung vào việc phân phối các tệp tập lệnh dựa trên "debug = true", EnableCDN, v.v.


@b_levitt Tôi là người mới sử dụng .NET và đã tìm ra giải pháp mà bạn đề cập. Nó thực sự đã giúp rất nhiều nhưng chỉ tò mò làm thế nào tôi có thể gọi hàm jQuery. Ví dụ, tôi có một menu jQuery và sau khi thực hiện phương pháp trên tôi đang sử dụng <script type='text/javascript'> //<![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] </script>. Đây có phải là cách tiếp cận chính xác?
Yashman Gupta

8
Tạo một ý chính: gist.github.com/monoman/ca42e54cdac25ef2284b cải thiện bằng cách không mã hóa giá trị jQueryVer;
Monoman

6
LƯU Ý: Tôi đã thêm hai gói Nuget này và mọi thứ diễn ra suôn sẻ. phải sao chép các tệp mới trong thư mục / bin vào máy chủ sản xuất .. nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h

1
Phụ thuộc vào trường hợp sử dụng của bạn cái nào là chính xác. Ứng dụng của chúng tôi không có xác nhận nào (hoàn toàn phân phối nội dung) và chúng tôi muốn tắt tất cả.
Samantha Branham

93

Có ít nhất ba cách để vô hiệu hóa việc sử dụng JavaScript không phô trương để xác thực phía máy khách:

  1. Thêm phần sau vào tệp web.config:
    <configuration>
      <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
      </appSettings>
    </configuration>
  2. Đặt giá trị của System.Web.UI.ValidationSettings.UnobtrusiveValidationMode tĩnh thànhSystem.Web.UI.UnobtrusiveValidationMode.None
  3. Đặt giá trị của thuộc tính System.Web.UI.Page.UnobtrusiveValidationModethể hiện thànhSystem.Web.UI.UnobtrusiveValidationMode.None

Để tắt chức năng trên cơ sở mỗi trang, tôi thích đặt thuộc Page.UnobtrusiveValidationModetính bằng cách sử dụng chỉ thị trang:

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

7
Cuộc gọi tốt đẹp trên cài đặt trên mỗi trang.
Brendan Hannemann

47

Xác thực không phô trương được bật theo mặc định trong phiên bản mới của ASP.NET. Xác thực không phô trương nhằm mục đích giảm kích thước trang bằng cách thay thế JavaScript nội tuyến để thực hiện xác thực bằng thư viện JavaScript nhỏ sử dụng jQuery.

Bạn có thể vô hiệu hóa nó bằng cách chỉnh sửa web.config để bao gồm các mục sau:

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

Hoặc tốt hơn là cấu hình đúng cách bằng cách sửa đổi phương thức Application_Start trong 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"
        }
    );
}

Trang 399 của Bắt đầu ASP.NET 4.5.1 trong C # và VB cung cấp một cuộc thảo luận về lợi ích của việc xác thực không phô trương và hướng dẫn để định cấu hình nó.

Đối với những người tìm kiếm RouteConfig. Nó được thêm tự động khi bạn thực hiện một dự án mới trong studio trực quan vào thư mục App_Code. Nội dung trông giống như thế này:

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 đến từ đâu?
Lucas

@Lucas Khi bạn tạo một dự án mới với studio trực quan, nó sẽ thêm RouteConfig.cs vào thư mục App_Code. Xem câu trả lời chỉnh sửa.
chối

12

để thêm một chút nữa vào câu trả lời từ b_levitt ... trên 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"
            });
        }
    }
}

trên default.aspx của bạn

<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

Tôi tin rằng tôi đã gặp phải tình trạng khó khăn tương tự. Tôi bắt đầu gặp phải vấn đề khi tôi đổi thành:

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

Cung cấp thông báo lỗi mà bạn mô tả ở trên.

thêm:

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

Giải quyết vấn đề, nhưng sau đó nó làm cho các điều khiển / tập lệnh xác thực của bạn đưa ra lỗi thời gian chạy Javascript. Nếu bạn đổi thành:

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

Bạn sẽ ổn, nhưng bạn sẽ phải đảm bảo phần còn lại của mã của bạn thực hiện / hoạt động như mong muốn. Bạn cũng có thể phải từ bỏ một số tính năng mới chỉ khả dụng trong 4.5 trở đi.

PS Rất khuyến khích bạn đọc những điều sau đây trước khi thực hiện giải pháp này. Đặc biệt, nếu bạn sử dụng chức năng Async:

https://bloss.msdn.microsoft.com/webdev/2012/11/19/all-about-httpr nb-targetframework/

CẬP NHẬT Tháng 4 năm 2017: Sau một số thử nghiệm và thử nghiệm, tôi đã đưa ra một sự kết hợp hoạt động:

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

với:

Phiên bản jQuery 1.11.3


6

Sự cố xảy ra do trình xác nhận điều khiển. Chỉ cần thêm tham chiếu Truy vấn J vào trang web của bạn như sau và sau đó thêm Cài đặt xác thực trong tệp web.config để khắc phục sự cố. Tôi cũng phải đối mặt với cùng một vấn đề và dưới đây đã đưa ra giải pháp cho vấn đề của tôi.

Bước 1:

Mã được thêm vào trong trang web

Bước 2 :

Mã được thêm vào trong tệp Web.config

Nó sẽ giải quyết vấn đề của bạn.


Tại sao bạn nên thêm Jquery sau khi thiết lập UnazedrusiveValidationMode thành không?
Ashin

0

Nó có 3 giải pháp mà những người khác đã nói ở trên ... nhưng khi thử giải pháp Application_Start, thư viện jQuery khác của tôi như Pickup_Date_and_Time không hoạt động ... vì vậy tôi đã thử nghiệm cách thứ hai và nó đã trả lời: 1- đặt Target FrameWork thành Pre 4.5 2 - Sử dụng "Không phô trươngValidationMode =" Không "" trong tiêu đề trang của bạn =>

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

nó hoạt động với tôi và không phá vỡ chức năng jQuery khác của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.