我将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 !!!**)
我不能。
答案 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
作为第三个参数传递