如何为具有相同名称(不同名称空间)的两个类处理MVC DisplayTemplates

凯恩

每个类名在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

迭代从AbstractViewModel和DisplayTemplates派生的ViewModels的集合将同时呈现两个DisplayTemplates

导入两个具有相同名称的类。怎么处理?

为不同命名空间中具有相同名称的两个服务设置两个入口

如何在不同的程序包中使用两个具有相同名称的类?

Java模板,如何使用两个具有相同名称和不同类型的类

两个具有相同名称的类可以跨两个不同的程序集位于同一个命名空间中吗?

如何比较两个具有相同名称的预处理器宏?

如何实现两个具有相同名称但参数不同的JNI方法?

具有相同名称和不同模板参数的两个结构如何工作

不同名称空间中具有相同名称的类

更改Java中的导入名称,或导入两个具有相同名称的类

不同cpp文件中同一命名空间中具有相同名称的两个对象

具有相同名称的两个功能

具有相同名称的两个输入

名称空间菜鸟问题:共享相同名称空间的两个cpp文件具有相同的变量

参考具有相同名称空间和类型的两个DLL

如何处理具有相同名称的 swift 类?

Swift类使用两个在不同目标中具有相同名称的Objective C文件

如何区分来自不同HTML页面但在views.py中具有相同名称空间的两个url请求?

C ++ Koenig(依赖于参数)查找:如果不同名称空间中的两个名称空间函数具有相同的参数类型怎么办?

Maven:如何在两个不同的模块下放置一个具有相同名称的模块?

c可以声明两个具有相同名称,返回类型但参数不同的函数

推断显示两个具有相同名称的不同变量?

两个不同包装中具有相同名称的实体

减去两个具有相同名称不同索引的数据框

创建两个具有相同名称但参数类型不同的R函数

Python-行为-具有相同名称的两个不同步骤

具有相同名称范围的Excel上的两个不同的从属下拉列表

关于导入两个具有相同名称的类的问题-android.graphics.Color