11

私の目標は、ユーザーの文化に応じて、クライアント側でユーザー入力を検証することです。

次の構造を持つプリミティブ データ モデルがあります。

public class User
{
 public int UserId { get; set; }

 [Required]
 [StringLength(20,MinimumLength=3)]
 public string Name { get; set; }

 [Required]
 public double Height { get; set; }
}

さらに、クライアント側の検証を有効にして、有効な数値かどうかを確認したいと考えています。したがって、<head>_Layout.cshtml のセクションに次の行を追加しました。

<script src="@Url.Content("~/Scripts/jQuery-1.4.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

別の言語形式で入力を検証する機能が必要なので (この特定のコンテキストでは、10 進数形式のドイツ語ですが0,75、米国ではそうです0.75)、次の行を追加しました ( jQuery Globalization PlugIn ) AFTER前述のjquery.validate.min.jsjquery.validate.unobtrusive.min.js.

<script src="@Url.Content("~/Scripts/jquery.glob.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globinfo/jquery.glob.de-de.js")" type="text/javascript"></script>
<script type="text/javascript">
 $(document).ready(function () {
  $.culture = jQuery.cultures['de-DE'];
  $.preferCulture($.culture.name);
 });
</script>

さらに、ドイツのカルチャが常に選択されるようにするためweb.configに、セクションに次の行を追加しました。system.web

<globalization culture="de-DE" uiCulture="de-DE" />

現在、次の動作が発生しています。

  • 0,1"Height" の値をテキスト ボックスに入力すると(ドイツ語のスペルに注意してください)、検証エラー メッセージThe field Height must be a numberが表示され、フォームを送信できません。
  • (English 'spelling') と入力0.1すると、フォームを送信できますが、サーバー側の検証で次の検証エラー メッセージが返されます。The value '0.1' is not valid for Height.

だから今、私は抜け出すことができないある種の行き詰まりに陥っています。

繰り返しますが、私の目標は、ユーザーの文化に基づいて、クライアント側とサーバー側で 10 進数の入力を検証することです (この場合はドイツ語にする必要があります)。私は何を間違っていますか?

どんな助けでも大歓迎です!前もって感謝します!

4

2 に答える 2

8

残念ながら、jQuery.validate.format 関数と jQuery.Globalization.format 関数の間に名前の競合があります。したがって、jquery 以外のグローバリゼーション プラグインを使用するようにコードを変更する必要があります。

私はそれについてのブログ投稿をここに書きました。

次のようになります。

<script src="@Url.Content("~/Scripts/globalization.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globinfo/Globalization.de-DE.js")" type="text/javascript"></script>
<script type="text/javascript">
$.validator.methods.number = function (value, element) {
    if (!isNaN(Globalization.parseFloat(value))) {
        return true;
    }
    return false;
}
$(document).ready(function () {
    $.culture = jQuery.cultures['de-DE'];
    $.preferCulture($.culture.name);
    Globalization.preferCulture($.culture.name);
});
</script>

それで十分なはずです。

于 2010-12-28T12:59:31.840 に答える
1

UnobtrusiveJavaScript を無効にする必要がありました。ページはすぐに反応しなくなりましたが、少なくとも機能します。

Web.Config でデフォルトで無効にすることができます。

<appSettings>
    <add key="enableSimpleMembership" value="false"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="false"/>
 </appSettings>

また、検証には Microsoft スクリプトを使用します。

MicrosoftAjax.js
MicrosoftMvcAjax.js
MicrosoftMvcValidation.js

また、jquery-1.4.4.min.js と jquery.glob のこともありますが、内部で使用していると思います。検証は、MS スクリプトによって行われています。

于 2010-12-17T17:01:02.073 に答える