- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 DisplayTemplates 文件夹中,每个类名称只能有一个 View ,因为类名称用作 view.cshtml 文件的名称。
但是,如果它们出现在不同的命名空间中,您可以在解决方案中使用相同名称的两个类:
MyNamespace.Class1
MyOtherNamespace.Class1
两者都尝试使用 View 定义的 DisplayTemplate:
Class1.cshtml
但是在 View 文件中你必须声明模型——例如:
@model MyNamespace.Class1
这意味着如果您有一个采用 MyOtherNamespace.Class1 的 DisplayFor,则会由于类型不匹配而出现运行时错误。
如果您事先知道发生这种情况的位置,您可以使用 UIHint 强制 DisplayFor 使用替代模板(或者您可以直接在 View 中使用命名模板)。但是,如果您事先不知道(您将所有这些对象都放在某种枚举中,因此如果不进行大量笨拙的反射(reflection)就无法编写特定的代码来处理像这样的边缘情况 - 是有什么方法可以为这些类设置 DisplayTemplates 吗?
最佳答案
我以前没有尝试过类似的东西,但它应该可以工作。您可以让 View 接受一个通用模型类型,例如 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);
}
然后,只需创建这些附加 View 即可。这样,您的代码仍然被整齐地分成特定的 View ,这些 View 可以有适当的模型声明。这个 View 基本上只是成为路由到正确 View 的代理。
关于c# - 如何处理具有相同名称(不同命名空间)的两个类的 MVC DisplayTemplates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45695649/
我需要显示存储在 ViewBag 中的日期,并且我需要使用 DisplayTemplate 来实现此目的。现在,如果它是模型中的日期,我将使用 DisplayFor 助手,但我该如何为 ViewBag
我想为 DateTime 属性创建一个 DisplayTemplate。 例如我有以下模型: public class MyModel { [DataType(DataType.Date)]
我在一个新的 MVC4 站点上安装了 Mini-Profiler,并注意到某些 Find: DisplayTemplates 的等待时间很长包括字符串和日期时间。下面是一个例子。在另一个问题中,Sam
应用程序是一个带有 RAZOR View 引擎的 MVC3 应用程序。 这里使用的 Controller 是 TestController。 我正在使用嵌套 View 。 基本 View (项目列表)
我有这个样本 @Html.DisplayFor(modelItem => item.Expires, "DateTimeToDate" ) DateTimeToDate 显示模板: @model Da
在 DisplayTemplates 文件夹中,每个类名称只能有一个 View ,因为类名称用作 view.cshtml 文件的名称。 但是,如果它们出现在不同的命名空间中,您可以在解决方案中使用相同
我使用 MVC4 并且在我的模型上有很多 DateTime? 类型的属性。 我想我可以创建一个 DisplayTemplate(在 Shared\DisplayTemplates 内),它可以按照我的
我为 Comment 创建了一个 DisplayTemplate类,并将其放在 Comment/DisplayTemplates/Comment.cshtml 中. Comment.cshtml输入正
我在 Razor 中创建了一个专门用于显示货币的显示模板,现在我想在我的代码中删除它并替换为接受字符串格式(我可以将其设置为“C”)的标准文本显示模板。 然而,出现了很多次,所以我想使用类似 [Obs
您能否将 MVC 指向默认文件夹(Views/Shared/EditorTemplates 和 Views/Shared/DisplayTemplates)以外的文件夹?我想将它们放在这些文件夹下面的
有没有人知道如何将编辑器和显示模板的母版页与 Razor 一起使用,类似于 Brad Wilson 在此记录的内容? http://bradwilson.typepad.com/blog/2009/1
如何在 Visual Studio 中找到单个假设编辑器模板的用法?或者也许在其他方向,我如何转到使用 EditorFor 呈现的模板? 最佳答案 有一种解决方法/帮助。如果您安装了 Visual S
我有一个 View 迭代一个集合并为集合中的每个元素调用 DisplayFor()。 我需要手动迭代(而不是将集合传递给 DisplayFor)以便告诉模板是否应该绘制列表中的中断。列表中的项目只有
为了学习 DisplayTemplates,我创建了一个“String”DisplayTemplate,如下所示。期望在模型的字符串值之后附加单词“Hello”。但它只显示“你好”这个词。我们如何纠正
我是一名优秀的程序员,十分优秀!