有没有办法将值从EditorTemplate传递到它的布局(不是网站_Layout,而是模板布局)
在MVC 5中我有这样的事情: EditorTemplates / MyStr.cshtml
@{
Layout = "_FieldLayout.cshtml";
ViewData.ModelMetadata.AdditionalValues.Add("__idpostfix", "-cde");
}
@Html.CustomHelper("")
CustomHelper使用2个输入标签,一个用于显示/编辑,另一个用于保持值,两个都有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字典,所以有另一种方法可以做到这一点,我最好的办法是在我需要后缀时使用不同的FieldLayout
答案 0 :(得分:1)
您可以使用ViewData
将数据从子视图传递到其布局页面(这不是特定于编辑器模板)。
在EditorTemplates/MyStr.cshtml
中,您可以设置ViewData["somedata"] = "some value";
,然后在_FieldLayout.cshtml
中,您可以轻松地使用它。
"孩子"布局的页面首先运行,因此任何具有副作用的代码(例如设置ViewData
)都将对布局页面可见。
另请注意,给定页面的ViewData
不会泄漏"备份",因此在消费后无需重置。