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

Visual Studio更新后ASP.NET Core传递视图数据到局部视图报错

问题背景与现象
  • 熟悉VB.NET,刚接触C#和ASP.NET Core
  • 项目代码原本在Visual Studio 16.9中运行正常,升级到17.10后,传递内联视图数据到局部视图时出现怪异编译错误:双击错误提示跳转到对应代码后错误消失,但重新编译时错误再次出现,导致编译失败
  • 问题代码示例:
<partial name="Productiegegevens_Cel" view-data='@new ViewDataDictionary(ViewData)
{
    { "Spacing", "mb-1" },
    { "Label", "Melk prijs (€/100kg)" },
    { "Naam", "melk_prijs" },
    { "Data", Model.Voerefficientie1.productiegegevens.melk_prijs.ToString("n2") },
    { "Data_alt", Model.Voerefficientie2 != null ? Model.Voerefficientie2.productiegegevens.melk_prijs.ToString("n2") : null },
    { "Append", @Model.Voerefficientie1.productiegegevens.melk_prijs_huidig.ToString("n2") }
}' />
  • 补充信息:单独创建ViewData对象再传递给局部视图可正常运行,但项目中存在大量上述内联写法;问题已在两台Windows 11电脑上重现
解答

写法合法性

这种内联初始化ViewDataDictionary并传递给局部视图的写法原本是合法的。ASP.NET Core Razor视图支持通过对象初始化器语法内联构建ViewDataDictionary实例,早期版本的Visual Studio Razor编译器能正确解析这种写法。

错误原因

这大概率是Visual Studio 17.10版本的Razor编译器/代码分析器出现了兼容性bug。新版本IDE升级时,Razor的语法解析逻辑可能发生了变化,对内联对象初始化器中的复杂表达式(比如三元运算符、嵌套模型属性访问)处理异常,导致编辑器和编译器的状态不一致——双击跳转后编辑器重新解析暂时修复了显示错误,但编译时仍会触发解析问题。

临时解决方案(减少代码修改量)

  • 清理项目的bin和obj目录,重启Visual Studio后重新编译,避免缓存引发的解析异常
  • 在视图顶部显式添加命名空间引用:@using Microsoft.AspNetCore.Mvc.ViewFeatures,确保ViewDataDictionary被正确识别
  • 将复杂表达式提前赋值到局部变量,简化内联初始化器内容:
    @{
        var melkPrijs = Model.Voerefficientie1.productiegegevens.melk_prijs.ToString("n2");
        var melkPrijsAlt = Model.Voerefficientie2 != null ? Model.Voerefficientie2.productiegegevens.melk_prijs.ToString("n2") : null;
        var melkPrijsHuidig = Model.Voerefficientie1.productiegegevens.melk_prijs_huidig.ToString("n2");
    }
    
    再修改局部视图调用:
    <partial name="Productiegegevens_Cel" view-data='@new ViewDataDictionary(ViewData)
    {
        { "Spacing", "mb-1" },
        { "Label", "Melk prijs (€/100kg)" },
        { "Naam", "melk_prijs" },
        { "Data", melkPrijs },
        { "Data_alt", melkPrijsAlt },
        { "Append", melkPrijsHuidig }
    }' />
    
  • 升级到与VS 17.10兼容的最新ASP.NET Core SDK版本(VS 17.10对应.NET 8.0系列,优先安装最新补丁版)

长期解决方案

  • 关注Visual Studio的后续更新补丁,微软大概率会在新版本中修复这个Razor解析bug
  • 若项目允许,逐步将内联初始化写法统一改为提前创建ViewDataDictionary对象的方式,降低对编译器复杂表达式解析的依赖

内容的提问来源于stack exchange,提问作者Erik van Engelen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:07:33