Plupload Asp.Net MVC如何将不同的参数传递给ActionResult方法

时间:2012-07-03 13:16:15

标签: asp.net-mvc plupload

我将Plupload用于Asp.Net MVC

我需要将任何值或viewmodel传递给ActionResult方法

例如表单的第一行代码

@using (Html.BeginForm("UploadImage", "Home",
            FormMethod.Post, new { enctype = "multipart/form-data" }))

ActionResult方法签名

[HttpPost]
public ActionResult UploadImage(int? chunk, string name, **I NEED PASS PARAMETER HERE !!!**)

我不能。

4 个答案:

答案 0 :(得分:5)

如果您需要为上传的每个文件传递不同的参数,请查看Passing dynamic parameters with each file in plupload 它正在与我的MVC4项目合作。

答案 1 :(得分:3)

首先,快速浏览official documentation

我很快找到了以下api属性:

  

multipart_params

     

对象名称/值集合,带有与多部分文件一起发布的参数。

让我们看一些示例代码:

var uploader = new plupload.Uploader({
    runtimes : 'html5,html4',
    browse_button : 'pickfiles',
    max_file_size : '10mb',
    resize : {width : 320, height : 240, quality : 90},
    url : 'upload.php',
    filters : [
        {title : "Image files", extensions : "jpg,gif,png"},
        {title : "Zip files", extensions : "zip"}
    ],
        multipart_params: { param1: 'value1', something: $('#foo').val() }
});

和你的行动方法......

[HttpPost]
public ActionResult UploadImage(int? chunk, int chunks, string name, string param1, string something)
{ ... }

试试..(这是未经测试的......但足以让你入门)

答案 2 :(得分:2)

@ Pure.Krome的解决方案适用于静态值,当用户将数据输入页面时,静态值不会改变。我使用了该解决方案,直到遇到元素内容可能已更改的问题。因此,我需要一个只在上传开始之前修改multipart_params的解决方案。

如果将multipart_params传递给Uploader()的构造函数,则使用$('#foo').val()使用当时具有id'foo'的元素的值。如果元素'foo'是表单元素,那么这可能不是你想要的。

因此,这是另一种选择。对于构造函数,您可能希望传递以下参数:

var uploader = new plupload.Uploader({
   // other params
   multipart: true
});

然后在开始上传之前,您需要设置multipart_params。例如,您可能在页面的某个位置有一个按钮。对于该按钮,您有一个启动上载的JavaScript处理程序。然后,生成的处理程序(包括设置multipart_params)可能如下所示:

$('#uploadfiles').click(function (e) {
   uploader.settings.multipart_params = { param1: document.getElementById("id1").value, param2: document.getElementById("id2").value };
   uploader.start();
   e.preventDefault();
});

请注意,您可以将名称“param1”更改为更有意义的内容,例如'标题'。对于输入元素,您可能还会有一个比'id'更有意义的id。在控制器端(我正在使用MVC 4),实现可能看起来像:

public ActionResult Upload(string name = "", int chunk = 0, int chunks = 0, string param1 = "", string param2 = "") {
   // ... your code here ...
}

保留示例:如果您将参数名称从“param1”更改为“title”,那么当然还需要将操作的参数名称从“param1”更改为“title”。生成的代码也显示了从中获取文件流的位置,如下所示:

public ActionResult Upload(string name = "", int chunk = 0, int chunks = 0, string title = "", string param2 = "") {
   // ... your code here ...
   System.Web.HttpPostedFileBase fileUpload = Request.Files[0];
   // ... and more of your code here ...
}

答案 3 :(得分:0)

据我了解,我认为您需要将HttpPostedFile作为第三个参数传递