2017-11-07 9 views
1

コントローラにViewBagの値を割り当て、jQueryの値をViewに設定しています。値を見ることができますが、条件を追加するときにはReSharperは常にCondition is always 'false'という警告を表示します。何故ですか?ReSharper:.jQueryのViewBagから値を読み取る際に警告する「条件は常に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

ここの事はある、あなたが混合していることあなたのnullのコンセプト。サーバー上のNullは、クライアント上のnullと同じではありません。またはnullからC#nullとは異なります.Javascriptです。

は、私は自分自身を少し説明しましょう:あなたのアクションの署名を見てみると

public ActionResult ViewQueue(int? id)、あなたがルート上のIDを渡さない場合、それはnullに設定され、デフォルトパラメータのおかげでことを特徴とC#4.0は2010年に戻って、ASP.NET MVCのこの面白いシナリオを可能にします。

のは、我々は最初の呼び出しでIDを渡しましょう:

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

あなたは、例えばChromeデベロッパーツールを使用して、クライアント上で生成されますコードを調べる場合は、そのコードの行がどこ表示されます

var conceptId = '@ViewBag.ConceptId';

これは、クライアント上でこのような何かに今翻訳されている:あなたはconceptId変数を割り当て

var conceptId = '5';

剃刀ビューのレンダリング中にサーバー側で式が評価され、conceptIdの値がokに割り当てられました。

これまでのところ、とても良いです。

パラメータなしで試してみましょう。 http://localhost:12345/Ctrl/ViewQueueと呼び、パラメータをnullに設定したままにします。

あなたがもう一度あなたのビューのために生成されたコードを調べる場合は、何か面白いもの表示されます:あなたのラインは現在、空の文字列の割り当てに翻訳されていて、それが整形があなたを語っているものです

var conceptId = ''; 

を:これは、nullとなる方法はありません。これまで

希望すると便利です。

+0

だから、私は '' ''の代わりに '' ''をチェックしなければなりません。このように 'if(!conceptId .trim()){ //空または空白 }' – CSharper

+0

@CSharper、それは動作します。うん。 –

+1

私はそれを試して、何が起こるか見てみましょう。徹底的な説明をありがとうございます。 – CSharper

関連する問題