You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Razor类库(RCL)中使用EditorTemplates及解决UIHint失效问题?

解决ASP.NET 6 MVC中RCL里[UIHint]属性失效的问题

以下是经过验证的可行方案:

  • 配置视图引擎搜索路径
    默认情况下,ASP.NET MVC的视图引擎只会扫描主项目的视图目录,不会自动包含RCL的路径。需要在Program.cs中手动添加RCL的视图位置配置:

    builder.Services.AddControllersWithViews()
        .AddRazorOptions(options =>
        {
            // 替换成你的RCL程序集名称
            options.ViewLocationFormats.Add("/{2}/Views/{1}/{0}.cshtml");
            options.ViewLocationFormats.Add("/{2}/Views/Shared/{0}.cshtml");
            // 如果使用EditorTemplates/DisplayTemplates,补充对应路径
            options.ViewLocationFormats.Add("/{2}/Views/Shared/EditorTemplates/{0}.cshtml");
            options.ViewLocationFormats.Add("/{2}/Views/Shared/DisplayTemplates/{0}.cshtml");
        });
    

    这里的{2}代表RCL的程序集名称,需确保RCL的视图文件和主项目保持一致的层级结构。

  • 确保RCL视图结构与属性设置匹配
    比如用[UIHint("CustomDate")]标记属性时,要在RCL中创建对应路径的模板文件(如Views/Shared/EditorTemplates/CustomDate.cshtml)。同时检查RCL视图文件的生成设置:将生成操作设为Content,复制到输出目录设为如果较新则复制。

  • 严格匹配[UIHint]名称与视图文件名
    [UIHint]的参数必须和视图文件名完全一致,包括大小写(跨平台部署时大小写敏感)。例如视图文件是CustomDate.cshtml,则[UIHint("CustomDate")]才会生效,不能写成customdate或Customdate。

  • 使用正确的视图辅助方法
    在主项目视图中,必须用Html.EditorFor()或Html.DisplayFor()渲染属性,这类方法会识别[UIHint]标记;Html.TextBoxFor()这类方法不会触发UIHint逻辑。示例:

    // 实体类
    public class MyModel
    {
        [UIHint("CustomDate")]
        public DateTime MyDate { get; set; }
    }
    
    // 主项目视图
    @model MyModel
    @Html.EditorFor(m => m.MyDate)
    

内容的提问来源于stack exchange,提问作者Olaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:07:12