3

StartTime 日付と EndTime 日付を持つモデルがあります。

[Required]
[DataType(DataType.DateTime)]
public DateTime StartTime { get; set; }

[Required]
[DataType(DataType.DateTime)]
public DateTime EndTime { get; set; }

これら 2 つの日付を使用する現在のビューの形式は次のとおりです。

@if (Roles.IsUserInRole("Teacher"))
{
    <h2>AddSession</h2>

    using (Html.BeginForm("SessionAdded", "Course", FormMethod.Post, new { id = "myform" }))
    {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Add Session</legend>
            <div class="editor-label">
                @Html.LabelFor(model => model.Name)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Name)
                @Html.ValidationMessageFor(model => model.Name)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.StartTime)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.StartTime, new { @class = "date" , id = "StartTime" })
                @Html.ValidationMessageFor(model => model.StartTime)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.EndTime)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.EndTime, new { @class = "date", id = "EndTime" })
                @Html.ValidationMessageFor(model => model.EndTime)
            </div>
            <p>
                <input id="submit" type="submit" />
            </p>
        </fieldset>
    }
}

: を削除すると <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>、問題はありません。

しかし、 を使用するjquery.validateと、2 つのフィールドが次のように返されますPlease enter a valid date.jQuery UI には DateTimePickerを使用します。

私は次のJavascriptコードを持っています:

$(document).ready(function () {

var datepickers = $('.date').datetimepicker({
    minDate: 0,
    dateFormat: "dd/mm/yy",
    timeFormat: "hh:mm",
    onSelect: function (date) {
        var option = this.id == 'StartTime' ? 'minDate' : 'maxDate';
        datepickers.not('#' + this.id).datepicker('option', option, date);
    }
});

$("#myform").validate({
    ignore: ".date"
})

});

特定の日付形式をチェックし、アプリでこれを使用する必要があるため、2 つの日付フィールド (class="date") の jQuery 検証を無視したいと思いますdd/mm/yyyy hh:mm

また、カスタムバリデーターを実行しようとしましたが、成功しませんでした。私はいつも Please enter a valid dateエラーが発生します...

ご協力いただきありがとうございます、

エド

4

2 に答える 2

2

私はこれを行い、複数のクライアント ローカルのブラウザ間で動作させるのに苦労しました。1 つの日付形式のみが必要であると断言できる場合は、次の手順でそれを実現できます。

次のような Views\Shared\EditorTemplates フォルダーに、Date.cshtml テンプレートという日付エディターを含めます。

@model DateTime?
@Html.TextBox("", Model.HasValue ? Model.Value.ToString("dd/MM/yyyy") : "", new { @class = "date" }) 

共有レイアウト ページや次のような共有スクリプトなど、適切な場所で日付ピッカーを呼び出す JavaScript を含めます。

$(document).ready(function () {
    $('.date').datepicker({ dateFormat: "dd/mm/yy", firstDay: 1, maxDate: "+0d" });
    $.validator.methods.date = function () { return true; };
});

true を返すだけでなく、カルチャの要件に基づいて検証するように、validator.methods.date 関数を変更することもできます。

最後に、IIS 設定を文化設定に設定します。Web 構成で pollirrata として設定するか、.Net グローバリゼーション設定の IIS 管理 UI でこれを行うことができます。

于 2012-05-11T21:10:03.417 に答える
1

CurrentCultureを、日付形式として使用しているものに変更する必要がある場合があります。ハンゼルマンはそれについて素晴らしい投稿をしています。MVCに含まれている目立たない検証を使用していますか?

これはあなたがする必要がある変更になります(私の場合、文化はGB用です)

web.config

<globalization culture="en-GB" uiCulture="en-GB" enableClientBasedCulture="false" />   

Global.asax

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");

また、アクションフィルタを作成して、送信時にアクションがカルチャを取得していることを確認できます

public class CultureAwareActionAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            if (!string.IsNullOrEmpty(filterContext.HttpContext.Request["culture"]))
            {
                Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo(filterContext.HttpContext.Request["culture"]);
            }
        }
    }

[CultureAwareAction]メソッド宣言にアノテーションを追加するだけです

(そのフィルターは、コントロールのローカリゼーションを処理するために、Telerikチームのために作成されました)

于 2012-05-11T17:21:20.290 に答える