在.NET Framework 4.8的CSHTML中通过JS调用模型属性报错求助
解决思路
1. 先检查CSHTML的页面指令
你的CSHTML文件顶部必须有正确的Razor指令,.NET Framework 4.8的MVC项目里,得加上这两行:
@using System.Web.Mvc @model 你的模型完整命名空间.你的模型类名
如果是Web Forms项目用CSHTML,要确认页面继承的基类正确,比如:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<你的模型类>" %>
没这些指令,Razor根本认不出Html帮助类。
2. 核对项目配置文件
- 要是MVC项目,打开Views文件夹下的web.config,检查pages节点里有没有注册MVC相关命名空间:
<system.web.webPages.razor> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> </namespaces> </pages> </system.web.webPages.razor>
缺了就补上,这是Razor能调用Html对象的关键配置。
- 要是Web Forms项目,得确保已经装了Microsoft.AspNet.WebPages这个NuGet包,同时Web.config里配置了Razor的处理程序。
3. 换种Json序列化方式(备选)
要是Html还是用不了,直接用.NET自带的序列化类代替也行:
var headerListData = @(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model.Header));
怕有特殊字符的话,可以配合HttpUtility.JavaScriptStringEncode做转义处理。
4. 确认文件位置
MVC项目里,视图文件必须放在Views目录(或者Area对应的Views子目录)里,要是随便放其他文件夹,Razor加载不了MVC的视图上下文,自然找不到Html对象。
5. 清理重建项目
有时候编译缓存会搞出这种上下文错误,试试:
- 右键项目选“清理”
- 手动删掉bin和obj文件夹
- 重新编译项目
内容的提问来源于stack exchange,提问作者DaveR
相关产品推荐
相关产品推荐

