2017-10-13 7 views
0

私は、DateTimeOffsetをローカライズするためにEditorTemplateを使用しています。EditorTemplate MVC 5.2に加えて追加のhtmlAttributes

EditorTemplate:私はHtml.EditorForを使用していたときに

@model DateTimeOffset? 
@Html.TextBox("", (Model.HasValue ? Model.Value.ToLocalTime() 
    .ToString("yyyy-MM-dd HH:mm") : string.Empty), new 
    { 
     @class = "form-control datetimepicker" 
    }) 

これが正しく動作しています。しかし、 htmlAttributesを私のビューのオブジェクトに渡したいと思います。

ビュー:

@Html.EditorFor(model => model.ValidToDate, new { 
    htmlAttributes = new { @data_date_min_date = DateTime.Now.ToString() } 
}) 

この例(data_date_min_date)内の属性がレンダリングされません。特定のビューに固有のhtmlAttributesをフィールドに追加するにはどうすればよいですか?

答えて

0

この追加データは、ViewData辞書を使用して渡しています。 Html.EditorForoverloadadditionalDataパラメータは、ビューデータディクショナリにマージされる匿名オブジェクトをとります。だから、私の質問への完全な答えとして、あなたのエディタテンプレートのビューデータ・ディクショナリ/部分図

@Html.EditorFor(model => model.ValidToDate, 
            new { data_date_min_date = DateTime.Now.ToString()}) 

から、あなたのエディタテンプレート

@model DateTimeOffset? 

<h4>Value passed from main view : @ViewData["data_date_min_date"]</h4> 

@Html.TextBox("", (Model.HasValue ? Model.Value.ToLocalTime() 
    .ToString("yyyy-MM-dd HH:mm") : string.Empty), new 
    { 
     @class = "form-control datetimepicker" 
    }) 
+0

'@ViewDataは、[「data_date_min_date」]'は存在しません。 @ ViewData ["htmlAttributes"] 'に格納されます。 – Sven

+0

いいえ、答えに表示された方法として 'data_date_min_date'の値を渡している場合、それはうまくいくはずです。キーと値を持つオブジェクトを渡します。しかし、あなたはそれに別のオブジェクトを持っているオブジェクトを渡そうとしていました。私は私のマシンでこれを確認し、それは完全に動作します。 – Shyju

0

でそれを読むことがあります。

htmlAttributesことビューに定義されているオブジェクトは、ViewData["htmlAttributes"]オブジェクトのEditorTemplateに渡されます。私がやっているようあなたは直接Html.TextBoxにこれを渡し、または追加htmlAttributesを供給することができる:

@model DateTimeOffset? 
@{ 
    RouteValueDictionary htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]); 
    string additionalHtmlAttributes = "form-control datetimepicker"; 
    if (htmlAttributes.ContainsKey("class")) 
    { 
     htmlAttributes["class"] = String.Format("{0} {1}", htmlAttributes["class"], additionalHtmlAttributes); 
    }else 
    { 
     htmlAttributes.Add("class", additionalHtmlAttributes); 
    } 
} 
@Html.TextBox("", (Model.HasValue ? Model.Value.ToLocalTime().ToString("yyyy-MM-dd HH:mm") : string.Empty), htmlAttributes) 
関連する問題