仅在 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",因此在使用后无需重置它。
有没有办法将值从 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",因此在使用后无需重置它。