Javascript 如何在写在js代码中的TempData Razor MVC中检查空值

Javascript 如何在写在js代码中的TempData Razor MVC中检查空值,javascript,c#,asp.net-mvc,razor,tempdata,Javascript,C#,Asp.net Mvc,Razor,Tempdata,我试图检查在javascript代码中编写的TempData Razor MVC中的空值,但不幸的是,它不起作用 无论TempData值是否为null,该条件始终为true if ('@TempData["Error"]' != null) { alert("Problem" + '\n' + "@TempData["error"]"); } else { alert("The file Uploaded Successfully"); } 我怎么检查? 如果有其他选择

我试图检查在javascript代码中编写的TempData Razor MVC中的空值,但不幸的是,它不起作用

无论TempData值是否为null,该条件始终为true

if ('@TempData["Error"]' != null) {
    alert("Problem" + '\n' + "@TempData["error"]");
} else {
    alert("The file Uploaded Successfully");    
}
我怎么检查? 如果有其他选择,请告诉我

谢谢

编辑:

上面的代码是jQueryAjax请求代码的一部分

 <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>

$body=$(“body”);
$(文件)({
ajaxStart:function(){$body.addClass(“加载”);},
ajaxStop:function(){$body.removeClass(“加载”);}
});
$(文档).ready(函数(){
$(“#上载”)。单击(函数(){
var data=new FormData();
//将多个选定文件添加到数据对象中
var files=$(“#files”).get(0).files;
对于(i=0;i0){
$.ajax({
键入:“POST”,
url:“@url.Action(“上载”、“文件”)”,
数据:数据,
contentType:false,
processData:false,
成功:功能(数据){
如果(“@TempData[“Error”]”!=null){
警报(“问题“+”\n“+”@TempData[“错误”]”);
}否则{
警报(“文件上传成功”);
}
},
错误:函数(){
警报(“失败”);
},
});
}
});
});

引用值,因此如果
@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”]
会在首次呈现页面时返回值。仅仅因为您可能正在
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");
    }

这是在一个单独的js文件中吗?
@TempData[“Error”]
不应该被引用。不,它在HTML页面中。事实上,上面的代码是JQuery ajax请求的一部分,我将更新帖子。请根据您的编辑和ajax调用中的事实参考更新的答案。它可以工作,但当请求以返回json(null)成功结束时。。它返回“Fail”。它转到错误:function(){alert(“Fail”);},除非抛出异常,否则不应发生此错误(尽管使用
$.getJSON()
方法时会发生此错误)。您总是可以执行类似于
返回Json(true)的操作
表示成功,并
返回Json(新的{Error=“your Error message”})if(response.Error){alert(response.Error);}else{…}
并且您是否碰巧添加了
dataType:'json',
(这也会导致错误-如果是这样,就删除它)我添加了dataType:'json',然后删除它。。同样的问题也发生了。幸运的是,我找到了很好的解决办法。非常感谢你的帮助。