ReSharper:"条件总是错误的"从.jQuery中的ViewBag读取值时发出警告

时间:2017-11-07 14:49:53

标签: jquery resharper

我正在为控制器中的ViewBag分配一些值,并在jQuery中的View中读取它。我可以看到值,但是当我添加一些条件时,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) {
    }

1 个答案:

答案 0 :(得分:1)

这里的问题是你正在混合你的null概念。服务器上的Null与客户端上的null不同。或者, C#中的null Javascript 上的null不同。

让我解释一下:

查看您的操作签名:public ActionResult ViewQueue(int? id),如果您未在路线上传递ID,则会将其设置为空,这要归功于默认参数功能 C#4.0在2010年回归并为ASP.NET MVC启用了这个有趣的场景。

我们假设我们在第一次通话时传递了一个ID:

http://localhost:12345/Ctrl/ViewQueue/5

例如,如果您使用Chrome开发者工具检查在客户端上生成的代码,您会看到分配了conceptId变量的代码行:

var conceptId = '@ViewBag.ConceptId';

现在已在客户端翻译成类似内容:

var conceptId = '5';

在剃刀视图渲染期间,在服务器端评估了表达式,并将conceptId的值分配为ok。

到目前为止,非常好。

让我们现在尝试不带参数。我们调用http://localhost:12345/Ctrl/ViewQueue,因此将参数设置为null。

如果再次检查生成的视图代码,您会看到一些有趣的内容:

var conceptId = '';

您的专栏现在已被翻译为空字符串作业,而改造商告诉您的是:null无法做到这一点。如初。

希望这有帮助!