每个类名在DisplayTemplates文件夹中只能有一个View,因为该类名用作view.cshtml文件的名称。
但是,如果解决方案中的两个类出现在不同的名称空间中,则它们可以具有相同的名称:
MyNamespace.Class1
MyOtherNamespace.Class1
两者都尝试使用view定义的DisplayTemplate:
Class1.cshtml
但是,必须在视图文件中声明模型-例如:
@model MyNamespace.Class1
这意味着如果您的DisplayFor使用MyOtherNamespace.Class1,则由于类型不匹配而导致运行时错误。
如果您事先知道发生这种情况的位置,则可以使用UIHint强制DisplayFor使用替代模板(或者可以在视图中直接使用命名模板)。但是,如果您事先不知道(您将所有这些对象都包含在某种枚举中,因此在没有很多繁琐的思考的情况下无法编写特定的代码来处理这种情况)-有没有办法为这些课?
我以前没有尝试过类似的方法,但是应该可以。您可以让视图接受通用模型类型,例如object
,然后尝试将其转换为适当的类型:
@model object
@if (Model is MyNamespace.Class1)
{
var class1 = Model as MyNamespace.Class1;
// view code for this type
}
@if (Model is MyOtherNamespace.Class1)
{
var class1 = Model as MyOtherNamespace.Class1;
// view code for this type
}
更新
再次查看此内容,我对在此模板中完成的分支感到不便。这是不可避免的,但是稍微更好的解决方案可能是这样的:
@model object
@if (Model is MyNamespace.Class1)
{
Html.RenderPartial("MyNamespaceClass1", Model);
}
@if (Model is MyOtherNamespace.Class1)
{
Html.RenderPartial("MyOtherNamespaceClass1", Model);
}
然后,只需创建这些其他视图。这样,您的代码仍可以整齐地分成特定的视图,这些视图可以具有适当的模型声明。该视图基本上只是成为路由到正确视图的代理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句