WebForms UnobtrusiveValidationModeには、「jquery」のScriptResourceMappingが必要です。jquery(大文字と小文字を区別)という名前のScriptResourceMappingを追加してください


305

Visual Studio 2012を使用してWebアプリケーションを構築しています。テキストボックスに単語数を追加しようとしています。ただし、javascriptコードとhtmlコードを追加した後。上記のエラーが表示されます。

これが私のJavaScriptコードです

コード:

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を使用する方法を指定します。

タイプ: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
注意:web.Configファイルの<appSettings>親はルート要素、つまり<configuration>である必要があります。
GY

4
.Net 4.5.2をインストールしてから、この問題に陥りました。4.5.2のWindows更新でマシン構成が変更されたと思います。
Rez.Net 2015年

3
「最大のページサイズ」の競争に勝とうとしない限り、控えめな検証を無効にする理由は何ですか。
EKW 2016

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 2014

8
要点を作成:gist.github.com/monoman/ca42e54cdac25ef2284b jQueryVer値をハードコーディングしないことで改善。
Monoman、2014年

6
注:私はこれら2つのNugetパッケージを追加し、物事はスムーズに行きました。/ binフォルダーの新しいファイルを運用 サーバーにコピーする必要がありました。nuget.org / packages / Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h

1
どちらが正しいかは、ユースケースによって異なります。私たちのアプリは何の検証も行わず(純粋にコンテンツ配信)、すべてオフにすることを推奨しました。
サマンサブラナム2016年

93

クライアント側の検証で控えめなJavaScriptの使用を無効にするには、少なくとも3つの方法があります。

  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ディレクティブを使用してプロパティを設定します。

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

7
ページごとの設定で素敵な呼び出し。
ブレンダンハネマン2015

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を開始した399ページでは、控えめな検証の利点と、それを構成するためのウォークスルーについて説明しています。

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 Visual Studioで新しいプロジェクトを作成すると、RouteConfig.csがApp_Codeフォルダーに追加されます。編集された回答を参照してください。
デンバー2015年

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

私は同じ困難に遭遇したと思います。私が次のように変更したときに、問題が発生し始めました:

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

問題は、コントロールバリデーターが原因で発生しました。次のようにWebページにJクエリ参照を追加し、web.configファイルに検証設定を追加するだけで問題を解決できます。私も同じ問題に直面し、以下は私の問題の解決策を示しました。

ステップ1:

ウェブページに追加するコード

ステップ2 :

Web.configファイルに追加するコード

それはあなたの問題を解決します。


UnobtrusiveValidationModeをnoneに設定した後でJQueryを追加する必要があるのはなぜですか?
アッシン

0

他の人が上に言った3つのソリューションがあります...しかし、Application_Startソリューションを試すと、Pickup_Date_and_Timeのような他のjQueryライブラリが機能しません...それで、私は2番目の方法でテストし、答えられました:1-ターゲットフレームワークを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.