Как проверить нулевое значение в TempData Razor MVC, написанное внутри js-кода

Я пытаюсь проверить нулевое значение в TempData Razor MVC, которое написано внутри кода JavaScript, но, к сожалению, это не работает.

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

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 ответ

Решение

Ваше цитирование значение, так что если @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");
    }
Другие вопросы по тегам