3

3 つのフィールドで構成される日付と時刻を入力するためのエディター テンプレートを作成しています。

  • jQuery UI の日付ピッカーを含むテキスト ボックス。
  • 時間を入力するテキストボックス。
  • JavaScript を介して完全な日付と時刻の文字列で更新される非表示の入力。

モデルにバインドされるフィールドは 1 つだけですが、ユーザーに表示される日付と時刻のフィールドを別々にするという考え方です。表示されるフィールドが変更されるたびに、隠しフィールドは JavaScript によって更新されます。

@model System.DateTime?
<span class="datetime-editor">
<input class="datepicker" value="@(Model.HasValue ? 
  Model.Value.Date.ToString() : string.Empty)" readonly="readonly"/>
<input class="time" value="@(Model.HasValue ? 
  Model.Value.TimeOfDay.ToString() : string.Empty)"/>
@Html.HiddenFor(d => d)</span>

日付ピッカーを設定し、非表示フィールドに値をコピーする JavaScript。

$(".datepicker").datepicker();
$(".datetime-editor").find("input").change(function () {
    var date = $(this).parent().find(".datepicker").val();
    var time = parseTime($(this).parent().find(".time").val());
    if (date != "" && time != null) {
        $(this).siblings(".datetime-result").val(date + " " + time);
    }
    else {
        $(this).siblings(".datetime-result").val("");
    }
});

私の問題は検証属性です。それらはすべて非表示の入力タグに存在します。

<input name="StartDateTime" id="StartDateTime" type="hidden" 
  data-val-required="Start date and time are required" data-val="true" value=""/>

data-val*何らかの形で生成された属性を取得し、代わりにそれらを可視入力に追加したいと思います。ViewData.ModelMetaDataフィールドが必須かどうかを調べることはできますが、その場合、属性を作成するロジックを再発明する必要がありますdata-val-required。代わりに生成された属性を取得したいと思います。

4

3 に答える 3

14

You could use an HTML helper to generate those inputs if you want HTML5 data-* validation attributes on them:

@{
    var validationAttributes = Html.GetUnobtrusiveValidationAttributes("");
}
@Html.TextBox(
    "", 
    Model.HasValue ? Model.Value.Date.ToString() : string.Empty, 
    new RouteValueDictionary(validationAttributes) 
    { 
        { "class", "datepicker" }, 
        { "readonly", "readonly" } 
    }
)

@Html.TextBox(
    "", 
    Model.HasValue ? Model.Value.TimeOfDay.ToString() : string.Empty, 
    new RouteValueDictionary(validationAttributes) 
    { 
        { "class", "time" } 
    }
)
于 2012-01-22T19:43:36.290 に答える
1

私は似たようなことをしようとしていました。ここでは、IDE が本当にあなたを迷わせます。

モデルのプロパティが必要かどうかを知りたい場合、[Required]属性を要求するのではなく、Nullable かどうかを要求することがあります。例えば:

public class MyModel
{
    public int Number1 { get; set; }
    public int? Number2 { get; set; }
}

これらはどちらも EditorTemplates\Int32.cshtml を使用します

エディター テンプレートでは、以下を使用できます。

@model System.Int32?
<input id=@Html.IdForModel() @(Model is Nullable ? "" : "required") />

@model System.Int32をチェックするときにIDEに文句を言わせたくない場合は、(ヌル可能にする)後の疑問符が必要であることに注意してくださいis Nullable

于 2013-04-24T21:37:07.477 に答える
0

クライアント側の検証を提供するアダプターを登録する必要があります: http://msdn.microsoft.com/en-us/library/system.web.mvc.dataannotationsmodelvalidatorprovider.registeradapter(v=vs.98).aspx

于 2013-07-26T16:03:08.687 に答える