2010-12-17 17 views
11

私の目標は、ユーザーのカルチャーに応じて、クライアント側のユーザー入力を検証することです。ASP.NET MVC 3 RC 2クライアントサイド検証(グローバリゼーションあり)

私は、次のような構造を持つプリミティブデータ・モデルがあります。さらに

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

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

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

を、私はそれが有効な数値であるかどうかをチェックする、クライアント側の検証が有効になっているにしたいです。したがって、私は_Layout.cshtmlの<head>セクションに次の行を追加しました。

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

私は別の言語形式(米国では、それは0.75だろう一方で、この特定のコンテキストでは、それは0,75の小数フォーマットとドイツ語です)に入力を検証する能力を持つようにしたいので、私が追加しました前述のjquery.validate.min.jsおよびjquery.validate.unobtrusive.min.jsの後に次の行(jQuery Globalization PlugIn)が続きます。

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

は今、私は、次の行動を経験しています:

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

はまた、私はドイツの文化が常に選択されていることを確認しsystem.webセクションでweb.configに次の行を追加しました:

  • 私は、「高さ」の値のテキストボックスに(ドイツの「スペル」を注意してください)0,1に検証エラーメッセージ012を入力した場合が表示され、フォームを送信できません。
  • 私は0.1(英語「スペリング」)を入力すると、私は、フォームを送信することができますが、サーバー側の検証は、次の検証エラーメッセージThe value '0.1' is not valid for Height.

を返しだから今、私はどこ死んロックのいくつかの種類によ私は出ることができません。

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

ご協力いただきありがとうございます。前もって感謝します!

答えて

8

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

私はちょうどそれについてのブログ投稿を書いてhere

あなたのためにそれは次のようになります。十分なはず

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

+0

あなたの 'if'は' 0'を不正な値として誤って識別します。関数の本体として 'return!isNaN(Globalization.parseFloat(value)); 'を使用してください。 –

+0

プラグインの作成者に通知しましたか?まだやっていないなら、してください。 私はsdeと同じ問題を抱えていますが、私は非公式または上書きの方法で "ハックしたくありません"。 – toebens

+0

さて、ちょうど私にコード掘り出しのトンを救った - あなたはスターです、ブログの投稿にはとても感謝し、これをSOに分けてください! – Dav

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スクリプトによって行われています。

関連する問題