ExtJS中FormPanel设置FileUpload为true后,提交返回下载文件的解决

来源:互联网 发布:.sql注释 编辑:程序博客网 时间:2024/06/04 18:42

在ExtJS中,如果设置FormPanel的FileUpload为true后,在IE里,submit后就会变成以文件形式下载返回的Json字符串。在FireFox中就无法执行submit的success和failure的回调函数。

解决方法就是不要返回Json,返回Content。

即例如:

return Json(new{    name = "Tom",    age = 18});return Content(new{    name = "Tom",    age = 18}.SerializeToJson());
使用下者,不要使用上者。

其中SerializeToJson的代码如下:

namespace System.Web.Script.Serialization{    /// <summary>    /// 为启用 AFAX 的应用程序提供序列化和反序列化功能。    /// </summary>    public static partial class JsonHelper    {        private static readonly JavaScriptSerializer _jss;        static JsonHelper()        {            _jss = new JavaScriptSerializer();        }        /// <summary>        /// 将当前对象转换为 JSON 字符串。        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="obj"></param>        /// <returns>序列化的 JSON 字符串。</returns>        public static string SerializeToJson<T>(this T obj)        {            return _jss.Serialize(obj);        }        /// <summary>        /// 将指定的 JSON 字符串转换为 T 类型的对象。        /// </summary>        /// <typeparam name="T">所生成对象的类型。</typeparam>        /// <param name="input">要进行反序列化的 JSON 字符串。</param>        /// <returns>反序列化的对象。</returns>        public static T Deserialize<T>(string input)        {            return _jss.Deserialize<T>(input);        }    }}
项目中记得引用System.Web和System.Web.Extensions。

然后前台页面的代码中submit不处理success回调函数。

对failure作如下处理:

failure: function(form, action) {    try {        /*         * 若转换对象过程中出现null,则是网络原因导致访问失败,在catch中处理         * 返回的文本会在前后分别添加"<PRE>"和"</PRE>",用replace替换掉(这里偷懒一下,正确的方式应该用substring)         * 接下来json字符串就可以转换回对象         */        var returnObj = Ext.decode(action.response.responseText.replace('<PRE>', '').replace('</PRE>', ''));    } catch(e) {        // 网络原因访问失败的情况    }}

0 0
原创粉丝点击