Как проверить нулевое значение в 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");
}