wil*_*lvv 6 javascript forms ajax asp.net-mvc json
我正在尝试使用JQuery Form插件(http://jquery.malsup.com/form/)从我的视图上传文件和一些额外的字段,我希望action方法将Json结果返回给javascript回调.
目前,ActionMethod被正确调用(我可以处理表单中的文件和字段)但是当我返回Json结果时,浏览器会尝试将其作为文件下载(如果我下载文件并查看其内容,那就是JSON内容我要回来了.)
这是我的表格:
<form id="FormNewFile" action="@Url.Content("~/Home/AddFile")" method="post" enctype="multipart/form-data">
<input type="hidden" name="eventId" value="25" />
<input type="text" name="description" />
<input type="file" name="fileName" />
<input type="submit" value="Send!" />
</form>
Run Code Online (Sandbox Code Playgroud)
这是我的javascript:
<script type="text/javascript">
$(function () {
$("#FormNewFile").ajaxForm({
dataType:'json',
success:processJson
});
});
function processJson(a,b) {
alert('success');
}
</script>
Run Code Online (Sandbox Code Playgroud)
这是我的ActionMethod:
[HttpPost]
public ActionResult AddFile(long? eventId, string description)
{
int id = 5;
return Json(new {id});
}
Run Code Online (Sandbox Code Playgroud)
浏览器尝试下载的文件名称类似于AddFilee87ce48e,最后8个字符是随机十六进制字符.
最后,下载文件的内容是:
{ "ID":5}
并且javascript中的processJson函数永远不会被调用.
我google了很多,似乎唯一有用的就是将JSON结果作为动作方法的"内容"结果返回,我认为这是我要采取的方法,但我仍然想知道为什么这不是工作?
有任何想法吗?
wil*_*lvv 10
我最终做的是手动序列化我想要返回的对象作为JSON,如果我这样做,那么响应将没有标题,因此它将由javascript而不是浏览器处理.我使用了这个辅助方法:
public static ActionResult JsonPlain(object x)
{
var result = new ContentResult();
result.Content = new JavaScriptSerializer().Serialize(x);
return result;
}
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人
归档时间: |
|
查看次数: |
5493 次 |
最近记录: |