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

3

我在Asp.Net MVC中使用Plupload

我需要将任何值或视图模型传递到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个回答

5
如果您需要为每个已上传的文件传递不同的参数,可以考虑查看Plupload中的动态传递每个文件参数。这在我的MVC4项目中运行良好。

3
首先,请快速查看官方文档
我找到了以下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
@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 ...
}

0
据我所理解,我认为您需要将HttpPostedFile作为第三个参数传递。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接