如何让jQuery的Uploadify插件与ASP.NET MVC一起使用?

Kin*_*tor 35 asp.net-mvc jquery uploadify

我正在尝试使用jQuery插件Uploadify来使用ASP.NET MVC.

我已经通过以下JavaScript代码段显示了插件:

<script type="text/javascript">
    $(document).ready(function() {
        $('#fileUpload').fileUpload({
            'uploader': '/Content/Flash/uploader.swf',
            'script': '/Placement/Upload',
            'folder': '/uploads',
            'multi': 'true',
            'buttonText': 'Browse',
            'displayData': 'speed',
            'simUploadLimit': 2,
            'cancelImg': '/Content/Images/cancel.png'
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

这似乎一切都很好.如果您注意到,"script"属性设置为my/Placement/Upload,这是我的Placement Controller和我的Upload Action.

主要问题是,我很难将此操作触发以接收文件.我在该操作上设置了一个断点,当我选择要上传的文件时,它没有被执行.

我试过根据这篇文章改变方法签名:

public string Upload(HttpPostedFileBase FileData)
{
    /*
    *
    * Do something with the FileData
    *
    */
    return "Upload OK!";
}
Run Code Online (Sandbox Code Playgroud)

但这仍然不会发生.

任何人都可以帮我写并正确获取上传控制器动作的签名,这样它实际上会触发吗?然后我可以自己处理文件数据.我只是需要一些帮助才能触发方法操作.

Jus*_*tin 20

public string Upload(HttpPostedFileBase FileData) {}
Run Code Online (Sandbox Code Playgroud)

是正确的 - uploadify上传的文件将被绑定到FileData.无需进入Request.Files来检索文件 - 这使得模拟和测试变得更加困难.

如果您的操作根本没有触发(即尝试调试并查看方法中的断点是否被命中),那么您的问题很可能是"脚本"值 - 您是在虚拟目录下运行吗?如果是这样,您需要将目录的名称放在前面.Uploadify使用绝对路径.

即'script:'/ virtual_directory/Placement/Upload'

现在uploadify正在发送到http:// localhost/Placement/Upload.

还可以尝试使用路由调试器(http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx)来检查路由的映射位置.


dp.*_*dp. 10

问题可能是您需要指定要上传到的操作设置为发布...它不能作为Get操作使用该操作.

所以这:

public string Upload(HttpPostedFileBase FileData)
{
   //do something
}
Run Code Online (Sandbox Code Playgroud)

应该是这样的:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload(HttpPostedFileBase FileData)
{
   //do something
}
Run Code Online (Sandbox Code Playgroud)

此外,请注意,如果您在网站的"登录"部分中使用此功能,则应查看有关uploadify和身份验证的已知错误:http://geekswithblogs.net/apopovsky/archive/2009/ 05//工作周围快闪cookie的错误-在- asp.net-mvc.aspx

另外,在MVC中,有几种方法可以处理文件上传(根据Rory Fitzpatrick的建议使用Request.Files,以及在操作定义中将HttpPostedFileBase文件作为参数传递).为了让Uploadify起作用,这应该不重要.