如何在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
相关产品推荐
相关产品推荐

