如何在jqGrid中支持文件上传?

时间:2012-07-01 23:36:33

标签: jquery asp.net-mvc asp.net-mvc-3 file-upload jqgrid

我的网络应用程序基于ASP.net MVC3并使用jqGrid。我坚持支持jqGrid所需的文件上传功能。

Web应用程序使用流程允许用户在其系统上选择文件并将其从jqGrid添加/编辑表单上载到数据库记录。用于文件上载的jqGrid colModel的编辑类型设置为edittype:'file'。在添加/编辑表单中,我可以查看“浏览...”按钮来选择图像。 jqGrid文档建议使用Ajax File上传插件进行文件上传。我找到了两个带有这个名字的插件,并尝试了两个。

  1. 来自PHPLetter的Ajax文件上传插件:此插件适用于jqGrid,但仅限于使用旧版本的jQuery时。由于在文件上传插件中使用了HandleError未记录的API,因此jQuery 1.5以来的功能被破坏了。

  2. 来自Valums的Ajax文件上传插件。我已经能够从jqGrid外部成功使用这个插件。我用于文件上传的脚本(在我的网格之外)如下:

    var uploader = new qq.FileUploader({
           element: fileUploader,
           action: @Url.Action("UploadProductImage"), 
           allowedExtensions: ['jpg', 'jpeg', 'png', 'gif'], )};
    
  3. 但是,我还没有找到在jqgrid添加/编辑表单中集成此插件的方法。如何初始化我的上传脚本并调用它?

    我无法使用基于Flash / HTML5的文件上传解决方案(例如Uploadify),因为我的应用需要使用IE 7和8.我感谢任何提示/建议。

    谢谢,

    罗伯特

1 个答案:

答案 0 :(得分:0)

对我有用的解决方案是编写我自己的非常短的HandleError函数,并仍然使用jqgrid - upload a file in add/edit dialog中描述的Ajax文件上传插件。所以我使用该解决方案,但我添加了以下功能:

jQuery.extend({
    handleError: function( s, xhr, status, e ) {
        // If a local callback was specified, fire it
        if ( s.error )
            s.error( xhr, status, e );
        // If we have some XML response text (e.g. from an AJAX call) then log it in the console
        else if(xhr.responseText)
            console.log(xhr.responseText);
    }    
});

我在这里找到了这个功能:http://www.johnmain.co.uk/blog/2012/06/14/jquery-handleerror-is-not-a-function-issues/

请注意另外一件事:我必须更改行

dataType: 'json',

dataType: 'JSON',

为了让jqgrid - upload a file in add/edit dialog的代码在Firefox中运行(在其他浏览器中,这应该不是问题)。