除EditorTemplate MVC 5.2外,还有其他htmlAttributes

时间:2017-10-13 22:03:58

标签: .net asp.net-mvc razor

我正在使用EditorTemplate本地化显示DateTimeOffset。

EditorTemplate:

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

当我使用Html.EditorFor时,这是正常的。但是,我想将其他 htmlAttributes传递给我视图中的对象。

查看:

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

此示例中的属性(data_date_min_date)未呈现。如何为特定视图的字段提供其他htmlAttribute?

2 个答案:

答案 0 :(得分:0)

您正在通过ViewData字典传递此附加数据。 Html.EditorFor overload@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"
    })

并在您的编辑器模板中

def main():

    print('hello world')

if __name__ == '__main__':

    main()

答案 1 :(得分: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)