Plupload Asp.Net MVC, как передавать разные параметры в метод ActionResult

Я использую Plupload для Asp.Net MVC

Мне нужно передать любое значение или модель представления в метод 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 !!!**)

Я не мог.


person Mr.Kiyak    schedule 03.07.2012    source источник


Ответы (4)


Если вам нужно передать разные параметры для каждого загруженного файла, стоит взглянуть на Передача динамических параметров с каждым файлом в plupload Он работает с моим проектом MVC4.

person JenonD    schedule 28.10.2012

Во-первых, быстро просмотрите официальную документацию.

Я быстро нашел следующее свойство 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)
{ ... }

Попробуйте это .. (это не проверено .. но достаточно для начала)

person Pure.Krome    schedule 03.07.2012

Решение @Pure.Krome работает, если у вас есть статические значения, которые не меняются, когда пользователи вводят данные на страницу. Я использовал это решение, пока не столкнулся с проблемой изменения содержимого элементов. Поэтому мне нужно решение, которое будет изменять multipart_params только непосредственно перед началом загрузки.

Если multipart_params передаются конструктору Uploader(), то при использовании $('#foo').val() используется значение элемента с идентификатором '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» для ваших элементов ввода. На стороне контроллера (я использую 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 ...
}
person Manfred    schedule 01.10.2012

Насколько я понимаю, я думаю, вам нужно передать HttpPostedFile в качестве третьего параметра

person Mohamed Farrag    schedule 03.07.2012