大家早上好。我一直在思考在我的mvc网络应用程序中使用plupload的最好方法是在后端创建上传文件时使用各自的记录。
我最终将其归结为以下过程 - 这将适用于新记录和现有记录(想想CMS):
模型(没有不相关属性的粗糙)将如下所示:
public class Record{
public IList<ClientFile> Files {get;set;}
}
客户端文件如下所示:
public class ClientFile{
public string UniqueId{get;set;}
}
我的问题在于每次成功上传后我在客户端上拥有的内容(ClientFile的json字符串)以及我如何正确地将其置于隐藏字段并正确绑定,以便我可以在我的模型中准备好客户端文件列表
我正在思考如何将隐藏字段构造成正确的,以便绑定器知道如何将它们连接到列表,或者做一些自定义反序列化自己将json字符串的集合转换为对象列表。
在我把银行假日周末丢到mvc之前,有没有人有任何智慧。
答案 0 :(得分:6)
这就是我现在实现的目标:
public class ProductModel
{
// This is the field bound to the view (hidden field)
public string FilesValue
{
get
{
return Files.ToJson<IEnumerable<Plupload>>();
}
set
{
Files = value.FromJson<IEnumerable<Plupload>>();
}
}
public IEnumerable<Plupload> Files { get; private set; }
}
(ToJson&amp; FromJson只是我用来快速序列化和反序列化对象的扩展方法。)
在我看来:
<input type="hidden" name="FilesValue" id="FilesValue" />
我有一个内联脚本,可以在加载表单时转换隐藏字段的值:
Bundles.AddInlineScript("fileManager.dserialize('" + Html.Raw(Model.FilesValue) + "')");
在表单之前运行的客户端脚本将发布到服务器:
function preSubmit(e) {
// need to force upload
var $form = $(e.currentTarget),
hidden = $form.find('#FilesValue')[0];
if (uploader.files.length > 0) {
uploader.bind('UploadComplete', function () {
serialize(hidden);
$form.trigger('submit');
});
uploader.start();
return false;
} else {
serialize(hidden);
return true;
}
}
n.b 上传器是对plupload的引用, serialize()是一个本地方法,它将文件数组转换为json,并将其发回。
答案 1 :(得分:2)
发布之前你的客户端html应该是这样的:
<input type="hidden" name="Files[0].UniqueId" value"XX" />
<input type="hidden" name="Files[1].UniqueId" value"XX" />
<input type="hidden" name="Files[2].UniqueId" value"XX" />
假设你有一个回调函数用于上传的每个文件都带有一个包含JSON字符串的参数,你可以在上传每个文件之后使用jQuery创建hiddens:
....
var i = 0;
....
function(data){
$('form').append('<input type="hidden" name="Files[' +i+'].UniqueId" value"'
+ data.UniqueId + '" />');
i++;
}