重写 ASP.NET MVC 3 RC 中的默认 EditorFor 模板选择

2024-01-18

我正在创建一个 MVC 应用程序,当前使用 EditorFor 生成大量视图。整个视图基本上只是一个 EditorForModel,而且效果很好。然而,我遇到了一个小问题,我似乎找不到解决方案,重要的是它按照我需要的方式工作,那就是在尝试渲染 EditorFor 界面时。绑定和类似的一切都已处理完毕,但问题是 EditorFor 认为它是一个接口,并且默认为“Object”模板。我需要它查看界面,看看它是否可以找到具有该名称的模板,如果找不到,我需要它查看所有存在的界面,看看它是否与其中任何一个匹配。为了更简单地解释它,请看这个例子:

接口:

public interface IAppProvider
{
    string Name { get; set; }
}

public interface IAppMusicProvider : IAppProvider
{
    int GetPlaylistCount();
} // Yeah, I know, this interface is not smart, but it's only for show.

如果我现在创建一个模型为“IAppMusicProvider”的视图,然后运行Html.EditorForModel(),我需要它来找到“~Views\Shared\EditorTemplates\IAppProvider.cshtml”模板。有什么简单的方法可以实现这一目标吗?


你可以尝试改变ModelMetadata.TemplateHint in the ModelMetadataProvider。一种方法是使用装饰器模式:

public class AbstractTypeTemplateSupportingModelMetadataProvider : ModelMetadataProvider
{
    private readonly ModelMetadataProvider wrapped;

    public AbstractTypeTemplateSupportingModelMetadataProvider(ModelMetadataProvider wrapped)
    {
        this.wrapped = wrapped;
    }

    public override IEnumerable<ModelMetadata> GetMetadataForProperties(object container, Type containerType)
    {
        var result = this.wrapped.GetMetadataForProperties(container, containerType).ToList();
        result.ForEach(ChangeTemplateHint);

        return result;
    }

    public override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, string propertyName)
    {
        var result = this.wrapped.GetMetadataForProperty(modelAccessor, containerType, propertyName);
        ChangeTemplateHint(result);

        return result;
    }

    public override ModelMetadata GetMetadataForType(Func<object> modelAccessor, Type modelType)
    {
        var result = this.wrapped.GetMetadataForType(modelAccessor, modelType);
        ChangeTemplateHint(result);

        return result;
    }

    private void ChangeTemplateHint(ModelMetadata source)
    {
        if (source.Model is IAppProvider) //Or use source.ModelType if you want to support the model being null.
            source.TemplateHint = typeof(IAppProvider).Name;
    }
}

在你的启动逻辑中:

ModelMetadataProviders.Current = new AbstractTypeTemplateSupportingModelMetadataProvider(ModelMetadataProviders.Current);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重写 ASP.NET MVC 3 RC 中的默认 EditorFor 模板选择 的相关文章

  • MVC4 输入字段占位符

    Does MVC4默认支持placeholders对于生成的输入字段 我没有找到任何东西 所以我正在尝试实现我自己的 但不幸的是Prompt E Mail 没有传递到ViewData ModelMetadata Watermark同时产生控
  • ASP.NET MVC 防伪造令牌不安全

    在没有 ssl 的情况下向服务器发出请求时 我实际上可以看到 MVC3 框架以纯文本形式生成的验证令牌密钥 该密钥存储在名为 RequestVerificationToken Lw 的 cookie 中 在混合安全环境中 实际上可以在向非
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 实体框架 - 选择特定列并返回强类型而不丢失强制类型转换

    我正在尝试做类似的事情这个帖子 https stackoverflow com questions 1094931 linq to sql how to select specific columns and return strongly
  • MVC中无法从ViewBag中提取数据

    我试图在提交之前从 ViewBag 中提取数据并通过 JS 将其插入表单隐藏字段中 这不起作用 在调试时 我发现 JS 表达式的一部分被忽略了 因此 var 被评估为空字符串 这是 JS 部分 它应该执行分配 function setid
  • ViewDataFactory 和强类型母版页

    我试图让我的强类型母版页在我的 ASP MVC 2 0 应用程序中工作 在这两篇文章的帮助下我已经取得了很大的进展 在 ASP NET MVC 中将数据传递到母版页 https stackoverflow com questions 785
  • 如何从 T、T& 或 T* 模板参数获取 T*

    我正在尝试找到一种方法来获取模板参数的基类 考虑下面的类 template
  • Pug 从模板内的另一个文件调用 js 函数

    我花了将近四个小时都无法解决这个问题 而且我找不到任何针对此类问题的有用文档 这就是问题 我正在使用 pug jade 模板 我想调用 pug 模板内的函数来转换一些数据 这是主要模板 main template section each
  • 如何在 Asp.NET MVC 中使用 RedirectToAction() 传递多个对象?

    我想使用redirectToAction 方法传递多个对象 下面是我重定向到的操作结果 public ActionResult GetEmployees Models Department department Models Categor
  • Ajax 长轮询无法正常工作

    我正在 MVC 2 中使用长轮询开发一个简单的陌生人聊天应用程序 如果我在不同的浏览器中打开应用程序 它在我的开发机器上工作正常 我的意思是 如果我在 IE 和 mozilla 中加载应用程序 它工作正常 如果我在浏览器的两个选项卡 例如
  • ASP.NET Core 中的 HttpRuntime.AppDomainAppPath 等效项

    相当于什么HttpRuntime AppDomainAppPath在 NET Core 中 我将一个项目从 ASP NET 移至 core 并且没有包含一些库 例如System Web 这是一个小例子 sb AppendLine New P
  • 以编程方式设置 aspnet:MaxHttpCollectionKeys

    在特定网站的一些管理功能中 我正在做一篇特别可怕的帖子 需要一个large要发布的数据量 为了实现这一点 我必须添加 Web config appSetting https stackoverflow com questions 88324
  • 重置 IIS 中的静态变量

    我已在 ASP NET MVC 应用程序的应用程序启动事件中为静态变量分配了值 protected void Application Start public static list
  • “RouteCollection”不包含“MapMvcAttributeRoutes”的定义

    我尝试使用基于属性的路由 但是当我尝试以下代码片段来激活基于属性的路由时 我收到以下错误消息 RouteCollection 不包含定义 MapMvcAttributeRoutes 这是我的代码 public class RouteConf
  • bootstrap css中垂直对齐缩略图?

    我认为这应该很简单 但我就是无法让它发挥作用 在 ASP NET MVC 中 我有一个如下所示的项目列表 div class row div class span12 ul class thumbnails foreach var film
  • 为什么 httpRuntime targetFramework="4.5" 禁止抓取 .ASPXAUTH cookie?

    当我的 web config 具有以下 httpRuntime 时 我的控制器无法获取 cookie ASPXAUTH 它似乎能够获取任何其他 cookie 无论带或不带句点前缀 如果我删除下面的行 它就可以正常工作
  • 使用 MVC5、Ajax、C# 和 MSSQL Server 级联 DropdownList

    我对来自 Windows 窗体和三层架构的 MVC 非常陌生 我试图找出使用从数据库填充的级联下拉列表 DDL 我使用 MS SQL Server 2012 VS 2013 目前我正在研究用户调查问卷 用户可以从 DDL 的多个答案中进行选
  • 如何重定向到 $.AJAX 上的视图完整 - asp.net mvc 3

    好的 我想在验证检查后使用 AJAX 将用户重定向到周围视图 我该怎么做 请帮忙 这是我的 AJAX 代码 EX 我希望用户重定向到 Home Movies 控制器操作 如果未登录 则停留在同一页面
  • 模板类中的静态成员初始化

    我需要在模板类中初始化一个静态布尔值 我尝试这样做this https stackoverflow com a 3229904 5337213 我能看到的唯一区别是我对类型参数 T 有约束 但这会导致编译错误 为什么 我该如何解决这个问题
  • MVVM 在 ASP.NET MVC 4 Web 应用程序中扮演什么角色?

    当我正在阅读 ASP NET MVC 4 这本书时 我对 MVVM 感到好奇 我开始谷歌搜索 找不到任何关于使用 MVVM 开发 Web 应用程序的书籍 所以我一定在这里遗漏了一些信息 据我了解 MVVM是通过knockout js和其他框

随机推荐

  • Android AccountManager.addAccountExplicitly 正在停止我的应用程序

    我仍然遇到 AccountManager addAccountExplicitly 方法的问题 我想创建一个将用户密码组合提交到网站的应用程序 该应用程序应该保存登录数据 因此我想使用 AccountManager HttpAuth jav
  • 为什么对于具有 float:left 样式的 li ,浏览器将 ul 元素的高度计算为 0?

    在要点中呈现的代码中 https gist github com 1341600 https gist github com 1341600我正在尝试使用 ul li 元素将一些搜索表单元素 而不是表格 分组在一起 当检查浏览器 带有 fi
  • Java Swing:如何将多个 JPanel 添加到 JScrollPane

    我在网上读到要将组件添加到 JscrollPane 我们必须执行 scrollPane getViewport setView jpanel 嗯 这是我的代码 为了显示多个组件 在本例中为 JButton 我尝试将它们添加到多个 JPane
  • 在 Hadoop MapReduce 脚本中导入外部库

    我正在 Amazon EMR Hadoop 实现之上运行 python MapReduce 脚本 从主脚本中 我得到了项目的相似性 在善后步骤中 我想将此输出拆分到每个项目的单独 S3 存储桶中 因此每个项目存储桶都包含与其类似的项目列表
  • C# 中的事务

    首先 这不是一篇关于数据库事务的文章 我想了解更多关于交易模型 http msdn microsoft com en us library ms172152 aspx在 NET 2 0 及更高版本中 由于我正在针对 NET 3 5 进行开发
  • Lua中的userdata和lightuserdata是什么?

    Lua中的userdata和lightuserdata是什么 我哪里需要它 一段时间以来 我一直在尝试解决它 但我似乎找不到任何我真正理解的教程 解释 为什么需要它们 为什么不能直接将 C 函数绑定到 Lua 元表 用户数据是任意大小和内容
  • 如何更改 Swagger-ui URL?

    我尝试更改 swagger URL 现在我有 http localhost 8080 context root rest swagger ui html http localhost 8080 context root rest swagg
  • is 和 = 有什么区别?

    我已将这些语句输入到序言解释器中 但对结果感到困惑 他们不应该返回同样的东西吗 真的 1 7 5 2 false 2 7 is 5 2 true 没有为什么 2并不意味着assign在 Prolog 中 而是unify 统一算法根本不知道算
  • 使用 Spring Web 服务客户端解密消息

    第350章 赏金和华夫饼给可以帮助我的人 我一直在挣扎Spring http en wikipedia org wiki Spring FrameworkWeb 服务加密好几天了 我不知道如何让 Spring 对消息正文的加密起作用 每当我
  • F# 惰性像素读取

    我想将图像像素延迟加载到 3 维整数数组中 例如 以简单的方式 它看起来像这样 for i 0 to Width for j 0 to Height let point image GetPixel i j pixels 0 i j lt
  • 如何实现从左侧滑动的侧边菜单?

    我是 Flutter 新手 刚刚完成入门教程 我想创建一个侧边菜单 当您滑动时它会从左侧出现 就像 Android 上的 Gmail 不幸的是 我在文档中找不到这样的布局 并且 flutter gallery 中的示例有点混乱 有人可以解释
  • 使用 C++ 将曲线重新采样为均匀长度的段

    使用 C 将曲线重新采样为均匀长度段的最佳方法是什么 我拥有的是代表二维曲线的一组点 在下面的示例中 我有一个带有 x 和 y 分量的点结构以及带有测试位置的点向量 每对点代表曲线上的一段 重采样曲线示例如下图所示 红色圆圈是原始位置 绿色
  • 递增并检查 XSLT 中的计数器变量

    我在分配计数器变量并递增它然后检查 XSLT 中的某个值方面没有什么困难 这是我的代码
  • 如何取消订阅应用程序的所有 Facebook 页面 Webhook

    我有一个 Facebook 应用程序 订阅了 20 000 多个页面 服务器无法处理来自所有这些 Facebook 页面的挂钩 我想从所有这些 Facebook 页面取消订阅我的应用程序 有没有更快的方法来做到这一点 我拥有的大部分页面访问
  • 从演示应用程序内部获取 Android 库模块版本号

    我可以通过编程方式获取我的应用程序的版本名称 例如this https stackoverflow com a 21119027 3681880 String versionName BuildConfig VERSION NAME 1 0
  • 将 MySQL 中的列从 int 更改为 double?

    基本上 我目前在MySQL表中有一个列 它是一个int 我想把它改成双倍 我在网上搜索过 但它提出的只是从列中获取值时进行转换 例如将某些日期转换为日期 但这不是我的意思 我猜这是 Alter Table 的问题 我在 MySQL 开发页面
  • RequestDispatcher.forward() 到“/WEB-INF”下的资源在 WebSphere 中不起作用

    在我的一个 servlet 中 我调用RequestDispatcher forward 调用 WEB INF 文件夹下某处的静态资源 request getRequestDispatcher WEB INF some path image
  • Twitter 的 Java/Grails 库:JTwitter、Twitter4J 或 Grails 插件?

    我正在寻求将一个新应用程序 将要构建 可能在 Grails 中 与 Twitter 集成 并发现 至少 有 3 个库可供使用 JTwitter http www winterwell com software jtwitter php 推特
  • C++根据条件初始化变量[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我目前正在尝试弄清楚如何根据条件初始化变量 这是我要修改的当前代码 int dimsOut 4 dimsOut 0 data gt nDat
  • 重写 ASP.NET MVC 3 RC 中的默认 EditorFor 模板选择

    我正在创建一个 MVC 应用程序 当前使用 EditorFor 生成大量视图 整个视图基本上只是一个 EditorForModel 而且效果很好 然而 我遇到了一个小问题 我似乎找不到解决方案 重要的是它按照我需要的方式工作 那就是在尝试渲