访问字符串存储在一个ViewBag ajax成功

Access string stored in a ViewBag on ajax success

本文关键字:一个 ViewBag ajax 成功 字符串 存储 访问      更新时间:2023-09-26

我对ASP很陌生。. NET MVC,我一直在寻找这个问题的解决方案,但我找不到任何适当的解决方案。我在stachoverflow上找到了一些解决方案,但没有任何方法对我有效。以下是一些链接:

可以从Javascript文件访问MVC ViewBag对象吗?

MVC 3 -将ViewBag内容分配给Javascript字符串

这是我对服务器的ajax调用:

var xhr = new XMLHttpRequest();
        xhr.open('POST', '/Prize/UploadPassport');
        xhr.send(formdata);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                var data = JSON.parse(xhr.responseText)
                if (data.nationality != "") {
                    $('#PassportData tbody').append('<tr><td data-title="@Web.Resources.MyResources.PassportNationality">' + data.nationality + '</td><td data-title="@Web.Resources.MyResources.PassportName">' + data.passportName + '</td><td><a><i id="viewApp_' + data.passportID + '" class="fa fa-search fa-lg" onclick="ViewPassport(' + data.passportID + ');"> <iframe id="img_' + data.passportID + '" class="costumeiframe"></iframe></i></a></td></tr>');
                }
                else {
                    //var errorMsg = data.errorMsg;
                    ShowDataValidationMessage("@ViewBag.FileError"); //here i'm getting an empty string
                }
            }
        }

在我的服务器端操作我设置ViewBag。FileError基于某些条件,这里是:

public ActionResult UploadPassport(HttpPostedFileBase FileUpload, string PassportCopyNationality)
    {
            if (Condition)
            {
                //Database access
            }
            else
            {
                if (isFileAlreadyExist)
                {
                    ViewBag.FileError = Web.Resources.MyResources.PassportAttachmentValidationForFile;
                }
                else if (file.ContentLength > 3145728 || !isFileTypeLegal)
                {
                    ViewBag.FileError = Web.Resources.MyResources.FileError;
                }
                return Json(new { nationality = "", passportName = "", passportID = "" });
            }

        }
        catch (IOException io)
        {
            return Json("File not uploaded");
        }
    }

问题是我得到一个空字符串

首先,@ViewBag.FileError(在脚本中)是在视图发送到客户端之前在服务器上解析的razor代码,因此除非您在生成此视图的GET方法中包含ViewBag.FileError = someValue,否则它将始终等同于null

其次,您的UploadPassport()方法返回JsonResult而不是视图,因此ViewBag甚至不存在。您可以通过将值添加到JsonResult来解决这个问题,例如

 return Json(new { fileError = someValue, nationality = "", passportName = "", passportID = "" });
然后在脚本 中访问它
ShowDataValidationMessage("data.fileError");