ReSharper:"Condition is always false" 从 .jQuery 中的 ViewBag 读取值时发出警告
ReSharper : "Condition is always false" warning when reading value from ViewBag in .jQuery
我正在为控制器中的 ViewBag
分配一些值,并在 View
中的 jQuery
中读取它。我可以看到该值,但是当我添加一些条件时,ReSharper
总是显示 Condition is always 'false'
警告。这是为什么?
控制器:
public ActionResult ViewQueue(int? id)
{
try
{
ViewBag.ConceptId = id;
}
catch (Exception ex)
{
Logger.Error("Error");
throw new Exception("Error occured, Error: " + ex.Message);
}
}
查看:
$(function () {
$('a[id="CancelJob"]').click(function (event) {
var conceptId = '@ViewBag.ConceptId';
alert("conceptId " + conceptId); // Getting id here.
if (conceptId == null) { // Seeing warning here.
// TODO: Get conceptId from somewhere else if conceptId is null or undefined.
}
});
我也试过以下但结果相同:
// using identity operator
if (conceptId === null) {
}
// Checking 'truthy'
if (conceptId) {
}
这里的问题是您在混合 null
概念。服务器上的 Null
与客户端上的 null
不同。或者,来自 C# 的 null
与 Javascript 上的 null
不同。
让我稍微解释一下:
查看您的操作签名:public ActionResult ViewQueue(int? id)
,如果您不在路线上传递 id,它将被设置为 null,感谢默认参数功能 C# 4.0 在 2010 年回归并为 ASP.NET MVC 启用了这个有趣的场景。
假设我们在第一次调用时传递了一个 id:
http://localhost:12345/Ctrl/ViewQueue/5
例如,如果您使用 Chrome 开发人员工具检查在客户端生成的代码,您会看到分配 conceptId
变量的代码行:
var conceptId = '@ViewBag.ConceptId';
它现在已经在客户端被翻译成这样:
var conceptId = '5';
.
表达式在 razor 视图渲染期间在服务器端进行了评估,并且 conceptId 的值分配正常。
到目前为止,还不错。
现在让我们试试不带参数。我们调用 http://localhost:12345/Ctrl/ViewQueue 从而将参数设置为空。
如果您再次检查为您的视图生成的代码,您会看到一些有趣的东西:
var conceptId = '';
您的行现在已被转换为空字符串赋值,这就是 Reshaper 告诉您的内容:这不可能是 null
。曾经。
希望对您有所帮助!
我正在为控制器中的 ViewBag
分配一些值,并在 View
中的 jQuery
中读取它。我可以看到该值,但是当我添加一些条件时,ReSharper
总是显示 Condition is always 'false'
警告。这是为什么?
控制器:
public ActionResult ViewQueue(int? id)
{
try
{
ViewBag.ConceptId = id;
}
catch (Exception ex)
{
Logger.Error("Error");
throw new Exception("Error occured, Error: " + ex.Message);
}
}
查看:
$(function () {
$('a[id="CancelJob"]').click(function (event) {
var conceptId = '@ViewBag.ConceptId';
alert("conceptId " + conceptId); // Getting id here.
if (conceptId == null) { // Seeing warning here.
// TODO: Get conceptId from somewhere else if conceptId is null or undefined.
}
});
我也试过以下但结果相同:
// using identity operator
if (conceptId === null) {
}
// Checking 'truthy'
if (conceptId) {
}
这里的问题是您在混合 null
概念。服务器上的 Null
与客户端上的 null
不同。或者,来自 C# 的 null
与 Javascript 上的 null
不同。
让我稍微解释一下:
查看您的操作签名:public ActionResult ViewQueue(int? id)
,如果您不在路线上传递 id,它将被设置为 null,感谢默认参数功能 C# 4.0 在 2010 年回归并为 ASP.NET MVC 启用了这个有趣的场景。
假设我们在第一次调用时传递了一个 id:
http://localhost:12345/Ctrl/ViewQueue/5
例如,如果您使用 Chrome 开发人员工具检查在客户端生成的代码,您会看到分配 conceptId
变量的代码行:
var conceptId = '@ViewBag.ConceptId';
它现在已经在客户端被翻译成这样:
var conceptId = '5';
.
表达式在 razor 视图渲染期间在服务器端进行了评估,并且 conceptId 的值分配正常。
到目前为止,还不错。
现在让我们试试不带参数。我们调用 http://localhost:12345/Ctrl/ViewQueue 从而将参数设置为空。
如果您再次检查为您的视图生成的代码,您会看到一些有趣的东西:
var conceptId = '';
您的行现在已被转换为空字符串赋值,这就是 Reshaper 告诉您的内容:这不可能是 null
。曾经。
希望对您有所帮助!