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

在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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值