Я использую управление загрузкой кендо в приложении Asp.net MVC
. При нажатии кнопки OK я хочу загрузить файл вместе с некоторыми метаданными (обратите внимание, что эта кнопка OK не является кнопкой OK элемента управления Загрузить, это какая-то другая кнопка в пользовательском интерфейсе)
Поэтому я установил для AutoUpload значение false.
Затем я запускаю событие загрузки через javascript. Я также хочу сохранить метаданные вместе с файлом, как указано в документации здесь я прикрепил событие на стороне клиента Upload
для установки метаданных.
Вот мой полный код
CSHTML
@(Html.Kendo().Upload().Name("files")
.Async(a=>a.Save("Save", "Home")
.AutoUpload(false)))
Загрузить JavaScript
$(function () {
var _btnOK = $("#btnOK");
var kendoUpload = $("#files").getKendoUpload();
// trigger kendo's upload event
_btnOK.click(function (e) {
e.preventDefault();
$(".k-upload-selected").click();
});
// attach metadata here
kendoUpload.bind("upload", function (e) {
e.data = {
"Name": "John Doe",
"Age": 40,
"Address": {
"State": "TX",
"City": "Dallas"
}
};
})
})
Соответствующий контроллер MVC и модель C#
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string State { get; set; }
public string City { get; set; }
}
[HttpPost]
public async Task<ActionResult> UploadDocument(Person model)
{
//file get posted in HttpContext.Request.Files
//model's immediate properties like Name and Age get posted however
//model.Address is remains null
}
Когда я нажимаю «ОК», выбранный файл отправляется на сервер внутри HttpContext.Request.Files, как и ожидалось.
Также публикуются непосредственные свойства модели, которые имеют примитивный тип данных, однако дочернее свойство модели типа сложного объекта не получает сообщение.
Таким образом, в приведенном выше примере Name
и Age
имеют значение, но Address
остается нулевым.
Есть идеи?