2011-11-18 26 views
20

私は私のモデルでDateTime性質を持っていますが、私は時間の部分にのみ興味:それはそうのように私の見解で検証属性が生成されないようにするにはどうすればよいですか?

public class MyModel 
{ 
    [Required, DataType.Time] 
    public DateTime Time 
} 

、I出力:これは、生成するために使用

@Html.EditorFor(model => model.Time) 

MVC 3で、次のHTML:今

<input class="text-box single-line" data-val="true" 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" /> 

私はMVC 4でこれをしようとしている、これは生成されたHTMLです:

<input class="text-box single-line" data-val="true" 
    data-val-date="The field Time must be a date." 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" /> 

追加された属性data-val-dateが追加されています。その結果、クライアント側の検証エラーが発生します。 "10:30")は日付として構成されていません。

これはMVC 4(I reported it)のバグだと思いますか?しかし、それが解決するまで、この属性が生成されないようにする方法はありますか?それとも、より良いのですが、代わりにdata-val-timeとして生成されるようにする方法があるので、私は自分のクライアント側の検証メソッドを時間フィールドに提供できますか?

答えて

2

より良いオプションは、独自のクライアント側の検証機能を記述することができます。それ以外の場合は、私はそれは正しい方法だとは思わないが、あなたの問題を解決することができますいくつかのなりすましを行うことができます。クライアント側の検証の動作を変更したいMVCの検証に関しても同様の問題がありました。ここでの考え方は、あなたが手動で入力フィールドに、このような「データ・ヴァル必要」などの属性と、「データ・ヴァル」を追加し、それのために検証メッセージを追加しているリンクに

Asp.net MVC3 validation

を参照してください。

何らかの形であなたを助けてくれることを願っています。

編集:

@Html.TextBoxFor(model => model.Time, new Dictionary<string, object> { { "data-val-required", "required" }, { "data-val", "true" }}) 
    @Html.ValidationMessage("Time", "The Time field is required.") 
+0

あなたの答えをありがとう、しかし、これは本当に私の問題が解決しない...私はそれが自動的にどこかに挿入されますように、特定の属性( 'データ-VAL-date'が)* *、挿入されないようにしますMVCパイプラインで – fretje

+0

@fretje編集セクションの下に書かれたコードを試してください – pramodtech

4

ない理想的な以下のようにモデル

public class MyModel 
{  
    public DateTime Time 
} 

からこの

削除に必要なフィールドattrはその後、あなたのコントロールに属性を追加しようとしたがそれは仕事をするでしょう。検証を削除するには、あなたのマスターテンプレートにJavaScriptを使用します。

$(document).ready(function(){ 
    $("input[data-val-date]").removeAttr("data-val-date"); 
}); 
1

私は順番に控えめな検証の検証を通過したJavaScriptのDateオブジェクトなどの入力フィールドの値を設定しようとしています。

$("#date-input-field").val(new Date(1,0,1970)); 
$.validator.unobtrusive.parse('#form'); 
var form = $('#form'); 
form.validate(); 

これは、jQuery 1.7.2、validation.unobtrusiveおよびmvc4で行われます。

これが役に立ちます。

3

[DataType(DataType.DateTime)]の代わりに[DataType( "Time")]を使用してください。これにより、MVCは変数をDateTimeとして扱わず、 "data-val-date"属性を生成しません。

[DataType( "Time")]は、変数をカスタム型にします。ただし、カスタムタイプには他の文字列名は使用できません。 MVCは、カスタムタイプの基になるタイプを検出しようとします。カスタムタイプの名前を「Time」と指定した場合にのみ、検出が断念されます。

1

HtmlHelperクラスでClientValidationEnabledUnobtrusiveJavaScriptEnabledをfalseに設定することをお勧めします。

HtmlHelper.ClientValidationEnabled = false; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = false; 
+0

私は自分の設定でそれらを持っています。それらをオフに設定しても機能しました。 –

+0

しかし、私はむしろビューに設定するほうが好きです。 –

+1

@VitorCanovaあなたが望むように.. –

関連する問題