2017-02-16 8 views
2

の内側に書かれたTempDataをカミソリMVC内のNULL値をチェックします。どのように私はjavascriptのコード内に記述TempDataをカミソリMVC内のnull値をチェックしようとしているが、残念ながらそれは動作しませんJSコード

TempDataを値がnullであるかどうか、条件が常に真

私は確認することができますどのように
if ('@TempData["Error"]' != null) { 
    alert("Problem" + '\n' + "@TempData["error"]"); 
} else { 
    alert("The file Uploaded Successfully");  
} 

のですか? 代替品がある場合は、教えてください。

ありがとうございました。

編集:

コードは、上記のjQueryのAJAXリクエストコードの一部です。

<script> 
    $body = $("body"); 
    $(document).on({ 
     ajaxStart: function() { $body.addClass("loading"); }, 
     ajaxStop: function() { $body.removeClass("loading"); } 
    }); 

    $(document).ready(function() { 
     $("#upload").click(function() { 
      var data = new FormData(); 

      //Add the Multiple selected files into the data object 
      var files = $("#files").get(0).files; 
      for (i = 0; i < files.length; i++) { 
       data.append("files" + i, files[i]); 
      } 
      //data.append("id", ''); 
      data.append("id", '@Model.NoteID'); 
      //Post the data (files) to the server 

      if (files.length > 0) { 
       $.ajax({ 
        type: 'POST', 
        url: "@Url.Action("Upload","Files")", 
        data:data, 
        contentType: false, 
        processData: false, 
        success: function (data) { 
         if ('@TempData["Error"]' != null) { 
          alert("Problem" + '\n' + "@TempData["error"]"); 
         } else { 
          alert("file uploaded successfully"); 
         } 
        }, 
        error: function() { 
         alert("Fail"); 
        }, 
       }); 
      } 
     }); 
    }); 
</script> 
+1

は、別のjsファイルにこのですか? – Mairaj

+0

'@TempData [" Error "]'は引用符で囲まないでください。 – m87

+0

いいえ、HTMLページの内側にあります。実際には上記のコードはJQueryのAjaxリクエストの一部です。私はその投稿を更新します。 – askm

答えて

4

あなたが値を引用し、その@TempData["Error"]nullであれば、それは空の文字列に変換します。あなたは.lengthを使用して、それをチェックすることができますが、あなたのAJAX呼び出しの内部でこれを使用して、質問の改訂状況に基づいて

var error = @Html.Raw(Json.Encode(TempData["Error"])) 
if (error) { 
    alert("Problem" + '\n' + error); 
} else { 
    alert("The file Uploaded Successfully"); 
} 

を使う方が良いでしょう。レンダリングコードは、ビューに送信される前にサーバー上で解析されるため、@TempData["Error"]は、ページが最初にレンダリングされるときに値を返します。 Upload()メソッドのTempDataの値を設定しているだけでは更新されない可能性があります。

あなたの方法は、あなたが成功コールバックでそれを表示できるように、エラーを含むJSONを返すべきです。たとえば、あなたの方法は

public ActionResult Upload(...) 
{ 
    return Json(null); // to indicate success, or 
    return Json("oops, something went wrong); 
} 

かもしれませんし、その後、AJAXコールバックで

success: function (response) { 
    if (response) { 
     alert(response); 
    } else { 
     alert("The file Uploaded Successfully"); 
    } 
+0

それは動作しますが、要求がreturn json(null)で正常に終了すると、「Fail」を返します。それはエラーになります:function(){alert( "Fail");} – askm

+0

あなたが例外を投げない限り起こるべきではありません( '$ .getJSON()'メソッドを使っています)。成功のために 'return Json(true);'と 'return Json(new {Error ="あなたのエラーメッセージ "});のような何かをいつでも行うことができ、スクリプトでは' if(response.Error){alert( response.Error); }他{...} ' –

+0

そして、あなたは' dataTypeと追加して起こった「JSON」、 '(また、エラーの原因となる - そうちょうどそれを削除した場合) –

関連する問題