2017-02-16 12 views
2

Я пытаюсь проверить значение null в TempData Razor MVC, написанное внутри javascript-кода, но, к сожалению, оно не работает.Как проверить значение null в TempData Razor MVC, написанное внутри js-кода

ли нулевое значение TempData или нет, то условие всегда истинно

if ('@TempData["Error"]' != null) { 
    alert("Problem" + '\n' + "@TempData["error"]"); 
} else { 
    alert("The file Uploaded Successfully");  
} 

Как я могу проверить? если есть альтернативы, сообщите мне.

спасибо.

Edit:

Код выше является частью 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 [" Ошибка "]' не следует указывать. – m87

+0

Нет, это внутри HTML-страницы. На самом деле код выше является частью запроса JQuery ajax, я обновляю сообщение. – askm

ответ

4

Вы процитировать значение, так что если @TempData["Error"] является null, он переводит на пустую строку. Вы можете проверить его с помощью .length, но было бы лучше использовать

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

на основе пересмотренного контексте вопроса, вы используете это внутри вызова Ajax. Код Razor анализируется на сервере до его отправки в представление, поэтому @TempData["Error"] возвращает значение, когда при первой странице отображается. Просто потому, что вы можете установить значение TempData в методе Upload(), не обновляет его.

Ваш метод должен возвращать 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

Работает, но когда запрос завершается успешно с возвратом json (null), он возвращает «Fail». он переходит в error: function() {alert ("Fail");} – askm

+0

Этого не должно произойти, если вы не выбросите исключение (хотя оно и работает с методом '$ .getJSON()'). Вы всегда можете сделать что-то вроде 'return Json (true),' for success и 'return Json (new {Error =" ваше сообщение об ошибке "});', а затем в скрипте - 'if (response.Error) {alert (response.Error); } else {...} ' –

+0

И вам не удалось добавить' dataType: 'json', '(что также могло бы вызвать ошибку - если это просто удалить его) –