c# - @Model 在 ASP.NET 中返回 null
问题描述
我有这个代码
if ($("#ProgramMode").val() == "Edit")
{
alert("@ViewBag.ProgramMode");
@**@obj.dataModel = {
data: JSON.parse("@Model.ClientDeds".replace(/"/g, '"')),
location: "remote",
sorting: "local",
sortIndx: "ReferralTypeID",
sortDir: "down"
};
}
当 $("#ProgramMode").val() 被评估为“编辑”时,它一切正常,因为“@Model.ClientDeds”不为空。
但是,当 $("#ProgramMode").val() 被评估为 "Add" 时,语句:
JSON.parse("@Model.ClientDeds".replace(/"/g, '"'))
由于“@Model”为空,因此引发 NullReferenceException。如果我删除声明
JSON.parse("@Model.ClientDeds".replace(/"/g, '"'))
并将其替换为 [] 或 NULL。有用
这不应该发生,因为 if 语句被评估为 false,但似乎解释器检查了服务器返回的元素的值,对吗?解决办法是什么?
我检查了检查器中是否正确评估了 if 语句。
注意:我通过更新 Create() 操作方法解决了这个问题,并将返回类型从:
return view()
至
return view ("Create",new MyObject());
但仍然需要知道它为什么解析它,如果它是假的,则在 if 事件中
解决方案
MVC razor 视图(.cshtml 文件)在发送到浏览器之前在服务器端进行处理 - 在此处理期间,cshtml 代码被转换为 HTML 代码,因为浏览器不知道 cshtml 是什么 - 它理解 HTML。作为服务器端处理的一部分,您的 .cshtml 文件中以 @ 符号开头的每个表达式都会在服务器端进行评估。如果您没有将模型传递给您的视图,您将获得空引用异常 - 在这种情况下。
例如,如果 Model.ClientDeds 包含一个字符串数组,如 ["John", "Doe", "Willis"],那么您的部分中的行
data: JSON.parse("@Model.ClientDeds".replace(/"/g, '"')),
将以下行形式发送到浏览器:
data: JSON.parse("["John", "Doe", "Willis"]".replace(/"/g, '"'))
看看这个链接了解视图引擎在这个过程中的作用:什么是视图引擎?它实际上是做什么的?
推荐阅读
- mysql - Django object.raw('query') 不返回更新的查询集
- azure - Azure 认知搜索,如何配置分析器以支持“startsWith”?
- r - 将组大小添加到汇总表不再有效
- python - 为什么这显示 1 个文件下载但在 LibTorrent 中保存 2 个文件
- loops - 我希望它只循环一次
- text - SwiftUI 和 WidgetKit - 自动更新组件
- sqlite - 使用单个查询计算组树中的人数
- php - 数据库中的 PHP 下拉菜单
- android - 通过单击应用程序图标(来自后台)打开时反应本机android应用程序重新启动
- visual-studio-code - 保存对 Visual Studio 代码的搜索