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

Blazor Server Side使用FindView找不到cshtml文件 求邮件模板渲染方案

问题解决方法

一、视图找不到的排查与修复

  • 首先修正FindView方法的入参:Razor视图引擎默认会自动补.cshtml后缀,传入的视图名不需要加后缀,将代码改为:
    var viewResult = _razorViewEngine.FindView(actionContext, "ConfirmUser", false);
    
  • 确认Blazor Server项目已注册Razor视图服务,在Program.cs中添加以下配置:
    builder.Services.AddControllersWithViews();
    
    若未注册该服务,RazorViewEngine不会正常初始化,自然无法检索视图文件。
  • 检查cshtml文件的属性配置:右键点击文件→选择「属性」,将「生成操作」改为「内容」,「复制到输出目录」改为「如果较新则复制」,避免运行时文件未被部署到对应路径。
  • 自定义路径优先使用GetView方法:如果你的cshtml没有放在Views/ControllerName或Views/Shared默认目录下,建议直接用GetView指定绝对路径,示例:
    // 第一个参数为站点根路径相对的基础路径,第二个为视图文件名,路径根据你的实际存放位置调整
    var viewResult = _razorViewEngine.GetView("~/Infrastructure/Email/ConfirmUser/", "ConfirmUser.cshtml", false);
    

二、修复cshtml语法错误

你当前的cshtml存在语法问题:HTML标签不能包裹在@{ }C#代码块中,且@model行末尾不需要加分号,修正后内容如下:

@model Project.API.Infrastructure.Email.ConfirmUser.ConfirmUserEmailViewModel

<p>Welcome @Model.Name,</p>

<p>Please confirm your email by <a href='@Model.ConfirmUrl'>clicking here</a>.</p>

<p>If you prefer you can copy and paste this link into your browser of choice.</p>
<br />
<p>@Model.ConfirmUrl</p>
<br />

三、更适配Blazor Server的替代方案

不用依赖MVC的cshtml视图体系,直接用Blazor原生的.razor组件渲染邮件HTML,完全避免路径查找问题,更贴合项目技术栈:

  1. 新建ConfirmUserEmail.razorRazor组件,写模板内容和模型绑定,和cshtml语法基本一致。
  2. .NET 7及以上版本可使用官方自带的IRazorComponentRenderer服务渲染组件为字符串,配置和调用示例:
    // Program.cs注册服务
    builder.Services.AddScoped<IRazorComponentRenderer, RazorComponentRenderer>();
    
    // 渲染代码
    var parameters = new ComponentParameterCollection()
        .Add(p => p.Model, new ConfirmUserEmailViewModel 
        {
            Name = "用户名",
            ConfirmUrl = "确认链接"
        });
    string htmlContent = await _razorComponentRenderer.RenderComponentAsync<ConfirmUserEmail>(parameters);
    
  3. 渲染得到的htmlContent可以直接传入MailKit作为邮件正文使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:30:02