Ajax 为什么我的json呈现在新页面中?
我正在尝试为我的网站做一个简单的图像上传程序 其思想是将图像文件发布到服务器,服务器返回包含URL的json。然后我使用JQuery用url更新一个p标记 以下是我的行动方法: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("../
[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"
}))