仅在 mvc 6 中将值从 EditorTemplate 传递到其布局模板

pass value from EditorTemplate to its Layout Template only, in mvc 6

有没有办法将值从 EditorTemplate 传递到它的布局(不是网站 _Layout,而是模板布局)

在 MVC 5 中,我有这样的事情: EditorTemplates/MyStr.cshtml

@{
    Layout = "_FieldLayout.cshtml";
    ViewData.ModelMetadata.AdditionalValues.Add("__idpostfix", "-cde");
}
@Html.CustomHelper("") 

CustomHelper 使用 2 个输入标签,一个用于 display/edit,另一个用于保存值,两者都有 id,显示一个有 -cde 后缀 _FieldLayout.cshtml 有这个:

@{
    var postfix = ViewData.ModelMetadata.AdditionalValues.ContainsKey("__idpostfix") ? ViewData.ModelMetadata.AdditionalValues["__idpostfix"] : string.Empty;
}
@Html.Label("", new {@for = ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty) + postfix})
... 

现在在 mvc 6 中,AdditionalValues 是一个 ReadOnly 字典,所以还有另一种方法吗,atm 我最好的选择是在我需要后缀时使用不同的 FieldLayout

您可以使用 ViewData 将数据从子视图传递到其布局页面(这并非特定于编辑器模板)。

EditorTemplates/MyStr.cshtml中你可以设置ViewData["somedata"] = "some value";然后在_FieldLayout.cshtml中你可以很容易地使用它。

布局的 "child" 页面首先运行,因此它运行的任何具有副作用的代码(例如设置 ViewData)将对布局页面可见。

另请注意,给定页面的 ViewData 不会泄漏 "back up",因此在使用后无需重置它。