Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 为什么我的json呈现在新页面中?_Ajax_Json_Asp.net Mvc 3 - Fatal编程技术网

Ajax 为什么我的json呈现在新页面中?

Ajax 为什么我的json呈现在新页面中?,ajax,json,asp.net-mvc-3,Ajax,Json,Asp.net Mvc 3,我正在尝试为我的网站做一个简单的图像上传程序 其思想是将图像文件发布到服务器,服务器返回包含URL的json。然后我使用JQuery用url更新一个p标记 以下是我的行动方法: [HttpPost] public JsonResult UploadImage() { var image = WebImage.GetImageFromRequest(); var filename = image.FileName; image.Save(Path.Combine("../

我正在尝试为我的网站做一个简单的图像上传程序

其思想是将图像文件发布到服务器,服务器返回包含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在我的布局页面中链接)

上传图像

@使用(Ajax.BeginForm(“UploadImage”、“Gtfo”、FormMethod.Post、新的AjaxOptions
{
HttpMethod=“post”,
UpdateTargetId=“filePath”,
InsertionMode=InsertionMode.InsertAfter,
OnSuccess=“updateFilePath”
},新
{
enctype=“多部分/表单数据”
}))
{

} 函数updateFilePath(结果){ $(“#filePath”).text(result.url); }
图像正在上载并保存到服务器。问题在于,一旦上传了图像,浏览器就会重定向到一个页面,以纯文本形式显示JSON数据

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

试试看

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

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

  • jquery.unobtrusive-ajax.js
  • MicrosoftMvcAjax.js
我能够在一个测试项目中复制您的问题,包括这两个脚本修复了问题

编辑


经过更多的测试,实际上并不需要MicrosoftMvcAjax。在我的布局页面顶部,我只需要两个脚本:jquery和jquery。不显眼的ajax.js

已经查看过页面的外观以及呈现后的功能了吗?我看到您正在使用MVC助手。您的设置看起来是正确的,但在不知道助手将呈现什么的情况下,很难说清楚。它呈现了一行文本:{“url”:。./Content/Images/padlock.jpg}它没有影响。也许我会转而编写原始Jquery,看看这是否有帮助。是的,我试过了,它导致了一个新的错误。你可以在我对原始帖子的编辑中看到详细信息。一旦你修复了这个错误,它可能会工作。尝试对图像处理进行注释,以验证JSON问题是否已修复,然后再考虑修复其他问题。是的,JSON现在已正确发回。我不明白为什么我的动作方法代码不再有效。我会接受这个答案,因为它确实回答了我的问题,但如果您对该文件不再上传的原因有任何见解,我将不胜感激。我对WebImage类不太熟悉,但快速的谷歌搜索确实发现了以下内容:。这不是你的问题,是吗?不,不过还是谢谢你。我必须找到另一种方法将图像上传到服务器。
@using (Ajax.BeginForm("UploadImage", 
                       "Gtfo",
                       new AjaxOptions {
                         HttpMethod = "post",
                         UpdateTargetId = "filePath",
                         InsertionMode = InsertionMode.InsertAfter,
                         OnSuccess = "updateFilePath"
                       },
                       new { enctype = "multipart/form-data"
                       }))