EditorHelper是否使用ViewBag将数据传递到相应的模板?

  发布于 2023-02-11 15:51

我在覆盖Object.cshtm模板时发现了一种奇怪的行为.该Object.cshtm迭代的Model特性和"发送"他们合适的模板进行渲染.

foreach (var prop in ViewData.ModelMetadata.Properties)        
{
    @Html.Editor(prop.PropertyName, 
          "MyCustomTemplateCollection" + prop.TemplateHint) 
    //TemplateHint set by custom attributes
}

一切运作良好:模板切换到适当的类型模板,在我可以访问Metadata属性的内部:

string name = ViewData.ModelMetadata.PropertyName;
string controllerName = ViewData.ModelMetadata.ContainerType.Name;

//render property accordingly (using the property information)

但是,如果由于某种原因ViewBag包含与其中一个属性同名的(动态)Model属性,ModelMetadata则不会完全生成; 至少上述ModelMetadata属性设置为null.例如,如果在我设置的控制器中ViewBag.ProductName = myModel.ProductName;,当ProductName属性进入其相应的模板时,元数据不包含"预期"值.

解决方案很简单:如果,不管出于什么原因,物业需要保存的ViewBag,它必须以不同的名称保存.

我的问题是:如何EditorHelper将数据传递给模板?我不希望这样,ViewDataViewBag"分享"这些信息.与检查快速监视我可以看到在Non-Public members中的ViewBag一个ViewData这似乎是一样的性质,可以说,一般可用ViewData对象.为什么不完全独立?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有