ASP.NET Core MVC项目的首页使用了视图组件(ViewComplonent)来呈现菜单
<vc:menu id="@roleId"></vc:menu>
项目正常运行大半年了,一直没有问题。
今天更新时出现了一个莫明其妙的问题,在部署服务器上,菜单无法显示。本地调试却没有任何问题。
具体现象就是在客户的服务器和公司内用于测试的服务器上,打开包含视图组件的页面,应该显示菜单的地方一片空白。但在VS中调试时,却又一切正常。
对比本地调试和服务器的页面,发现本地调试的页面中,<vc:menu id="@roleId"></vc:menu>
被生成的HTML代码替换,这个是正确的,ASP.NET的标签,编译后就会被相应的HTML标签替换掉。而服务器的页面,<vc:menu id="@roleId"></vc:menu>
标签仍然存在,也就是服务器上的ASP.NET Core没有把它识别为视图组件标签,没有进行编译,导致视图组件无法正常显示。
虽然找到原因,但不知道如何解决,这问题实在太奇怪了。客户服务器和测试服务器出现同样情况,可以排除服务器问题。本地调试没问题,可以排除代码问题,实在是头大。
最后查看微软文档,发现可以使用代码的方式调用组件视图
@await Component.InvokeAsync("Menu", new {id=roleId})
以上代码和<vc:menu id="@roleId"></vc:menu>
标签的作用一样,问题得以解决。但问题原因仍然是个谜……