Asp.net mvc Plupload Asp.NETMVC如何将不同的参数传递到ActionResult方法中

Asp.net mvc Plupload Asp.NETMVC如何将不同的参数传递到ActionResult方法中,asp.net-mvc,plupload,Asp.net Mvc,Plupload,我对Asp.NETMVC使用Plupload 我需要将任何值或viewmodel传递到ActionResult方法中 例如表格的第一行代码 @using (Html.BeginForm("UploadImage", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) ActionResult方法签名 [HttpPost] public ActionResult UploadImage(in

我对Asp.NETMVC使用
Plupload

我需要将任何值或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 !!!**)

我不能

据我所知,我认为您需要将
HttpPostedFile
作为第三个参数传递。首先,快速查看

我很快发现了以下api属性:

多部分参数

对象名称/值集合,包含要与多部分文件一起发布的参数

让我们来看一些示例代码:

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)
{ ... }

试试看。。(这是未经测试的..但足以让您开始学习)

@Pure.Krome的解决方案可以在用户将数据输入页面时保持静态值不变的情况下工作。我一直使用这种解决方案,直到遇到元素内容可能已更改的问题。因此,我需要一个只在上传开始之前修改多部分参数的解决方案

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

因此,这里有一个替代方案。对于构造函数,您可能希望传递以下参数:

var uploader = new plupload.Uploader({
   // other params
   multipart: true
});
然后,在开始上传之前,需要设置multipart_参数。例如,您的页面上可能有一个按钮。对于该按钮,您有一个启动上载的JavaScript处理程序。生成的处理程序(包括设置multipart_参数)可能如下所示:

$('#uploadfiles').click(function (e) {
   uploader.settings.multipart_params = { param1: document.getElementById("id1").value, param2: document.getElementById("id2").value };
   uploader.start();
   e.preventDefault();
});
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 ...
}
请注意,您可以将名称“param1”更改为更有意义的名称,例如“Title”。对于您的输入元素,您可能还有一个比“id”更有意义的id。在控制器端(我使用的是MVC4),实现可能类似于:

public ActionResult Upload(string name = "", int chunk = 0, int chunks = 0, string param1 = "", string param2 = "") {
   // ... your code here ...
}
继续示例:如果您将参数名称从“param1”更改为“title”,那么当然操作的参数名称也需要相应地从“param1”更改为“title”。生成的代码(还显示从何处获取文件流)如下所示:

$('#uploadfiles').click(function (e) {
   uploader.settings.multipart_params = { param1: document.getElementById("id1").value, param2: document.getElementById("id2").value };
   uploader.start();
   e.preventDefault();
});
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 ...
}

如果您需要为每个上传的文件传递不同的参数,那么值得一看 它正在与我的MVC4项目一起工作