雷沙珀:“我不知道。”;“条件总是错误的”;从.jQuery中的ViewBag读取值时出现警告
我正在为控制器中的雷沙珀:“我不知道。”;“条件总是错误的”;从.jQuery中的ViewBag读取值时出现警告,jquery,resharper,Jquery,Resharper,我正在为控制器中的ViewBag分配一些值,并在View中的jQuery中读取它。我可以看到值,但当我添加一些条件时,ReSharper始终显示条件始终为“false”警告。为什么呢 控制器: public ActionResult ViewQueue(int? id) { try { ViewBag.ConceptId = id; } catch (Exception ex) { Logger.Error("Error")
ViewBag
分配一些值,并在View
中的jQuery
中读取它。我可以看到值,但当我添加一些条件时,ReSharper
始终显示条件始终为“false”
警告。为什么呢
控制器:
public ActionResult ViewQueue(int? id)
{
try
{
ViewBag.ConceptId = id;
}
catch (Exception ex)
{
Logger.Error("Error");
throw new Exception("Error occured, Error: " + ex.Message);
}
}
视图:
我也尝试过以下方法,但效果相同:
// using identity operator
if (conceptId === null) {
}
// Checking 'truthy'
if (conceptId) {
}
这里的问题是,您正在混合您的
null
概念<服务器上的code>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 Developer工具检查客户端上生成的代码,您将看到分配conceptId
变量的代码行:
var-conceptId='@ViewBag.conceptId'代码>
现在,它已在客户端上转换为如下内容:
var-conceptId='5'代码>
在razor视图渲染期间,在服务器端对表达式进行了求值,并为conceptId指定了ok值
到目前为止,一切顺利
现在让我们在不使用参数的情况下进行尝试。因此,我们调用,将参数设置为null
如果再次检查视图中生成的代码,您将看到一些有趣的内容:
var conceptId = '';
您的行现在已被转换为空字符串赋值,这就是整形器告诉您的:这不可能是null
。永远
希望这有帮助 这意味着,我必须检查'
而不是null
。像这样,如果(!conceptId.trim()){//为空或空白}
让我试试看会发生什么。非常感谢您的详细解释。
var conceptId = '';