2012-09-26 2 views
5

Datetimeプロパティから作成された要素のhtml属性 "data-val-date"の生成を避けるにはどうすればよいですか?ASP.NET MVC 4 datetimeのデータval-dateの生成を避ける

モデル:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "Date of birth")] 
    public DateTime? DateOfBirth { get; set; } 
} 

ビュー:実際には

@Html.LabelFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

が、私は与えていないされ、誕生日を選択するための3つのドロップダウンリストの要素を作成しています値を日付形式で返します。 私が見た解決策のいくつかは、回避策として、javascriptで検証を削除することでした。 私が考えている解決策は、DateTimeプロパティを各値(日、月、年)ごとに3つの長いものに分割することです。

答えて

0

日付を検証するために、検証システムがdata-val-dateを使用します。これを削除すると、クライアント側の検証は機能しません。

これが必要な場合は、クライアント側の検証を無効にしてください。

+0

ご質問ありがとうございます。クライアント側の検証を無効にすると、すべての要素に影響しますか? 私の側では、私は3つの値を含む新しいオブジェクトを選択し、datetimeを置き換えます。 – bado

+0

@bado - 申し訳ありませんが、あなたが何を意味するのか分かりません。 –

+0

私は正確には、私はちょうどWeb技術で始める必要があります。私は、クライアント側の検証を無効にすると、(フォーム上のすべての要素の)すべてのデータvalは無効になります。 – bado

12

これは午後の仕事でした...明らかに、mvc4はview-modelのdatetime-date = "Message"をdatetimeの各プロパティにレンダリングすることにしました。私はこのデフォルトの動作を修正しようとしましたが、成功しませんでした。

これは私の問題を解決:

$.validator.addMethod('date', 
    function (value, element) { 
     return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures... 
    }); 

あなたはまた、あなたの共有EditorForフォルダ内の「DateTime.cshtml」という名前の独自のエディタテンプレートを書いてみることができますが、1つであるため、そこにTextBoxForを使用していません同様に汚染されている。

+0

私は問題の原因を無効にするだけであるため、このソリューションを使用することをお勧めします。クライアント側の検証では、ユーザーエクスペリエンスが向上し、サーバーへのポストバックが削減されるため、全体を無効にする必要はありません。 –

+0

まだ有効+ 1ed – user2695433

0

アプリケーションにこれを追加するには、まずglobal.asaxファイルでフォームを起動してください。

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 
関連する問題