如何通过jQuery上传文件?

时间:2010-01-07 22:17:19

标签: c# jquery asp.net-mvc

我想知道如何使用jQuery ajax这样做。现在我有一个jQuery ui对话框弹出窗口,它上面有一个html输入文件。

现在当用户点击导入时,我想用jQuery向服务器发一个ajax帖子。

我不知道如何将文件传递到我的操作视图。

现在我有一个完整的帖子,所以我有这个

<% using (Html.BeginForm("Import", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
{%>
    <br />
    <p><input type="file" id="file" name="file" size="23 accept="text/calendar"></p><br />
    <p><input type="submit" value="Upload file" /></p>        

<% } %> 

然后在我的控制器中

  public ActionResult Import(HttpPostedFileBase file)

所以我不知道如何使用jQuery传入HttpPostedFileBase以及如何在jQuery中设置enctype = "multipart/form-data"

修改

好吧,jQuery表单插件似乎是要走的路。

$('#frm_ImportCalendar').livequery(function()
{
    var options = {
        dataType: 'json',
        success: function(response)
        {
            alert(response);
        }
    };

    $(this).ajaxForm(options);
});

我想知道为什么我的json没有工作,但有人提到你不能按原样使用它。我正在查看有人能够使用json的其他链接。

我不确定为什么Lck在ajax submit方法之前使用了.submit。

修改

如何更改文件上传json结果以返回我的字典数组?

        Dictionary<string, string> result = new Dictionary<string, string>();
        result.Add("Msg", "Success!!");
        result.Add("Body", calendarBody);

// how can I change this?
    return new FileUploadJsonResult { Data = new { message = string.Format("{0} uploaded successfully.", System.IO.Path.GetFileName(file.FileName)) } };

3 个答案:

答案 0 :(得分:4)

使用jQuery Form Plugin,您可以完成异步文件上传。请查看以下链接

jQuery表单插件 - 代码示例 - 文件上载 http://jquery.malsup.com/form/#file-upload

祝你好运!

答案 1 :(得分:0)

根据Dominic的建议,使用jQuery Form plugin。您已经构建的表单应该已经正常工作。只需添加一个ID即可识别它:

<% using (Html.BeginForm("Import", "Controller", FormMethod.Post, new { id = "asyncForm", enctype = "multipart/form-data" }))

并使用jQuery Form发布数据:

$(document).ready(function(){
    $('#asyncForm').submit(function(){
        $(this).ajaxSubmit({
            beforeSubmit: function(){
                //update GUI to signal upload
            }
            data: { additional = 'value' },
            dataType: 'xml',
            success: function(xml){
                //handle successful upload
            }
        });
    });
});

请注意,上传文件的表单中的返回dataType不能为JSON。在控制器的方法中使用XML或HTML作为响应。

答案 2 :(得分:0)

我能够使用jQuery Form plugin和自定义的JsonResult类通过AJAX上传文件,如here所述。

使用此选项返回类似词典

的内容
return new FileUploadJsonResult { Data = new { Msg = "Success!!", Body = calendarBody } };

并在回调函数中获取您的消息

success: function(result) {
  $("#ajaxUploadForm").unblock();
  $("#ajaxUploadForm").resetForm();
  alert(result.Msg);
}