20

モデルにプロパティがありDateTimeますが、時間の部分だけに関心があります。

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

私の見解では、次のように出力します。

@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 のバグだと思います (報告しました)。しかし、解決されるまで、この属性が生成されないようにする方法はありますか? またはさらに良いことにdata-val-time、代わりに生成する方法があるので、時間フィールドに独自のクライアント側検証メソッドを提供できますか?

4

5 に答える 5

4

理想的ではありませんが、それで十分です。マスター テンプレートで JavaScript を使用して、検証を削除します。

$(document).ready(function(){
    $("input[data-val-date]").removeAttr("data-val-date");
});
于 2011-12-05T13:55:10.813 に答える
3

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

基本的[DataType("Time")]に、変数をカスタム型にします。ただし、カスタム タイプに他の文字列名を使用することはできません。MVC は、カスタム型の基になる型を検出しようとします。カスタム タイプに という名前を付けた場合にのみTime、検出が放棄されます。

于 2013-02-23T23:18:13.960 に答える
2

より良いオプションは、独自のクライアント側検証関数を作成することです。それ以外の場合は、なりすましを行うことができますが、それが正しい方法であるとは言えませんが、問題を解決できます。クライアント側の検証の動作を変更したいMVC検証に関して同様の問題がありました。リンクをご覧ください

Asp.net MVC3 検証

ここでの考え方は、入力フィールドに「data-val-required」や「data-val」などの属性を手動で追加してから、検証メッセージを追加することです。

何らかの形でお役に立てば幸いです。

編集:

これを試して

モデルから必須フィールド属性を削除

public class MyModel
{    
    public DateTime Time
}

次に、以下に示すように属性をコントロールに追加します

    @Html.TextBoxFor(model => model.Time, new Dictionary<string, object> { { "data-val-required", "required" }, { "data-val", "true" }})
    @Html.ValidationMessage("Time", "The Time field is required.")
于 2011-11-18T16:07:55.727 に答える
1

入力フィールドの値をjavascriptの日付オブジェクトとして設定しようとしました。これにより、目立たない検証の検証に合格しました。

$("#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を使用して実行されます。

お役に立てれば。

于 2012-04-03T18:47:53.600 に答える
1

最善の方法は、 HtmlHelperクラスClientValidationEnabledUnobtrusiveJavaScriptEnabledfalse に設定することです。

HtmlHelper.ClientValidationEnabled = false;
HtmlHelper.UnobtrusiveJavaScriptEnabled = false;
于 2015-05-05T04:03:51.267 に答える