我正在为控制器中的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) {
}
答案 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
无法做到这一点。如初。
希望这有帮助!