【问题标题】:Why is my json being rendered in a new page?为什么我的 json 在新页面中呈现?
【发布时间】:2012-02-08 03:39:10
【问题描述】:

我正在尝试为我的网站做一个简单的图片上传器。

想法是将图像文件发布到服务器,服务器返回包含 URL 的 json。然后我使用 JQuery 用 url 更新一个 p 标签。

这是我的操作方法:

[HttpPost]
public JsonResult UploadImage()
{
    var image = WebImage.GetImageFromRequest();
    var filename = image.FileName;

    image.Save(Path.Combine("../Content/Images",filename));

    return Json( new{ url= "http://www.example.com/Content/Images/"+filename)} );

}

这是我的带有脚本标签的视图代码。 (Jquery 链接在我的布局页面中)

上传图片

@using (Ajax.BeginForm("UploadImage", "Gtfo", FormMethod.Post, new AjaxOptions
        {
            HttpMethod = "post",
            UpdateTargetId = "filePath",
            InsertionMode = InsertionMode.InsertAfter,
            OnSuccess = "updateFilePath"
        }, new
        {
            enctype = "multipart/form-data"
        }))
{
    <input type="file" name="imageUploader" /><br />
    <input type="submit" name="Submit" id="Submit" value="Upload" />
}


<script type="text/javascript">

    function updateFilePath(result) {

        $("#filePath").text(result.url);
    }
</script>

图片正在上传并保存到服务器上。问题在于,一旦上传了图像,浏览器就会重定向到以纯文本形式显示 JSON 数据的页面。

编辑:我在互联网上做了一些阅读,我认为问题可能是我没有在我的布局页面中包含不显眼的 JavaScript。我已经将该脚本添加到我的布局页面中。现在,服务器没有将图像上传到我的服务器,而是在var filename = image.FileName; 处引发异常。原因是因为image 现在为空。在包含不显眼的 javascript 之前,这并没有发生。我不确定这是前进还是后退。

【问题讨论】:

  • 查看过页面的外观和渲染后的效果?我看到您正在使用 MVC 助手。您的设置看起来是正确的,但在不知道助手将呈现什么的情况下很难准确地说出来。
  • 它呈现单行文本阅读:{"url":"../Content/Images/padlock.jpg"}

标签: ajax json asp.net-mvc-3


【解决方案1】:

您需要包含以下所有脚本:

  • jquery.unobtrusive-ajax.js
  • MicrosoftMvcAjax.js

我能够在测试项目中复制您的问题,并且包含这两个脚本解决了问题。

编辑

经过更多测试,实际上不需要 MicrosoftMvcAjax。我在布局页面顶部需要的唯一两个脚本是 jquery 和 jquery.unobtrusive-ajax.js

【讨论】:

  • 是的,我试过了,但它导致了一个新错误。您可以在我对原始帖子的编辑中查看详细信息。
  • 修复该错误后,它可能会起作用。尝试注释掉图像处理以验证 JSON 问题是否已修复,然后再考虑修复您的其他问题。
  • 是的,JSON 现在可以正确回发。我不明白为什么我的操作方法代码不再有效。我会接受这个答案,因为它确实回答了我的问题,但如果您对文件不再上传的原因有任何见解,我将不胜感激。
  • 我对 WebImage 类不太熟悉,但通过 google 快速搜索确实找到了这个:geekswithblogs.net/GruffCode/archive/2011/05/30/…。这不是你的问题吗?
  • 不,不过还是谢谢。我得想办法把图片上传到服务器。
【解决方案2】:

试试

@using (Ajax.BeginForm("UploadImage", 
                       "Gtfo",
                       new AjaxOptions {
                         HttpMethod = "post",
                         UpdateTargetId = "filePath",
                         InsertionMode = InsertionMode.InsertAfter,
                         OnSuccess = "updateFilePath"
                       },
                       new { enctype = "multipart/form-data"
                       }))

【讨论】:

  • 没有影响。也许我会改用编写原始 Jquery 看看是否有帮助。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 2014-05-25
  • 1970-01-01
相关资源
最近更新 更多