WebForms UnobtrusiveValidationMode에는 'jquery'에 대한 ScriptResourceMapping이 필요합니다. jquery (대소 문자 구분)라는 ScriptResourceMapping을 추가하십시오


305

Visual Studio 2012를 사용하여 웹 응용 프로그램을 작성하고 있습니다. 텍스트 상자에 단어 수를 추가하려고합니다. 그러나 자바 스크립트 코드와 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

4.5 이전 유효성 검사 모드를 활성화하려면 web.config 키가 필요합니다.

ValidationSettings : UnobtrusiveValidationMode 에 대한 추가 정보 :

ASP.NET에서 내장 유효성 검사기 컨트롤이 클라이언트 쪽 유효성 검사 논리에 눈에 띄지 않는 JavaScript를 사용하도록 전역 적으로 설정하는 방법을 지정합니다.

유형 : 눈에 띄지 않는 검증 모드

기본값 : 없음

설명 :이 키 값을 "없음" [기본값]으로 설정하면 ASP.NET 응용 프로그램은 클라이언트 쪽 유효성 검사 논리에 4.5 이전 동작 (페이지의 JavaScript 인라인)을 사용합니다. 이 키 값을 "WebForms"로 설정하면 ASP.NET은 클라이언트 측 유효성 검사 논리를 위해 추가 된 스크립트 참조의 HTML5 데이터 특성 및 늦게 바인딩 된 JavaScript를 사용합니다 .

예:

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

14
이것이 왜 문제일까요? 왜 기본적으로이 기능을 비활성화 할 수 없었습니까? 어쨌든 누가 이것을 가능하게하고 싶습니까? 답이 무엇이든이 키를 추가
했는데

40
를 사용하는 경우 "없음"이 기본값 이 아닌 것 같습니다 targetFramework="4.5". 이 설정을 작동 시키려면이 설정을 web.config에 명시 적으로 추가해야했습니다.
Jesse Webb

18
알림 : web.Config 파일의 <appSettings> 부모는 루트 요소, 즉 <configuration>이어야합니다.
GY

4
.Net 4.5.2를 설치 한 다음이 문제에 빠졌습니다. 4.5.2의 Windows 업데이트가 시스템 구성을 변경했다고 가정합니다.
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 패키지를 추가했으며 문제가 해결되었습니다. 프로덕션 서버에서 / 빈 폴더에 새 파일을 복사했다 .. 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.UnobtrusiveValidationModepage 지시문을 사용하여 속성 을 설정하는 것이 좋습니다.

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

7
페이지 별 설정에 대한 통화가 좋습니다.
Brendan Hannemann

47

새로운 버전의 ASP.NET에서는 눈에 띄지 않는 유효성 검사가 기본적으로 사용됩니다. 눈에 띄지 않는 유효성 검사는 유효성 검사를 위해 인라인 JavaScript를 jQuery를 사용하는 작은 JavaScript 라이브러리로 대체하여 페이지 크기를 줄이는 것을 목표로합니다.

다음을 포함하도록 web.config를 편집하여 비활성화 할 수 있습니다.

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

또는 global.asax에서 Application_Start 메소드를 수정하여 올바르게 구성하십시오.

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

C # 및 VB의 ASP.NET 4.5.1 시작 페이지 397에서는 눈에 거슬리지 않는 유효성 검사의 이점과이를 구성하는 방법에 대해 설명합니다.

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를 사용하여 새 프로젝트를 만들면 App_Code 폴더에 RouteConfig.cs가 추가됩니다. 수정 된 답변을 참조하십시오.
denver

12

global.asax의 b_levitt ...의 답변에 조금 더 추가하려면 :

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

나는 같은 quandary를 만났다고 생각합니다. 다음으로 변경했을 때 문제가 발생하기 시작했습니다.

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

위에서 설명한 오류 메시지가 표시됩니다.

첨가:

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

문제를 해결 하지만 유효성 검사 컨트롤 / 스크립트에서 Javascript 런타임 오류가 발생합니다. 다음으로 변경하면

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

괜찮아 야 하지만 나머지 코드가 원하는대로 작동하는지 확인해야합니다. 4.5 이상에서만 사용할 수있는 일부 새로운 기능을 포기해야 할 수도 있습니다.

PS이 솔루션을 구현하기 전에 다음을 읽어 보는 것이 좋습니다. 특히 비동기 기능을 사용하는 경우 :

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

2017 년 4 월 업데이트 : 몇 가지 실험과 테스트를 거친 후 작동하는 조합을 생각해 냈습니다.

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

와:

jQuery 버전 1.11.3


6

제어 유효성 검증기로 인해 문제점이 발생했습니다. 다음과 같이 웹 페이지에 J Query 참조를 추가 한 다음 web.config 파일에 유효성 검증 설정을 추가하여 문제점을 극복하십시오. 나도 같은 문제에 직면했고 아래는 내 문제에 대한 해결책을 주었다.

1 단계:

웹 페이지에 추가 할 코드

2 단계 :

Web.config 파일에 추가 할 코드

문제가 해결됩니다.


UnobtrusiveValidationMode를 none으로 설정 한 후 왜 Jquery를 추가해야합니까?
Ashin

0

그것은 다른 사람들이 위에서 말한 3 가지 솔루션을 가지고 있지만 Application_Start 솔루션을 시도 할 때 Pickup_Date_and_Time과 같은 다른 jQuery 라이브러리가 작동하지 않습니다 ... 따라서 두 번째 방법을 테스트하고 대답합니다. -페이지 헤더에서 "UnobtrusiveValidationMode ="None ""을 사용하십시오 =>

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

그것은 나를 위해 작동하고 다른 jQuery 함수를 방해하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.