作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Redactor作为一个 HTML 编辑器,它有一个 component for uploading images and files .
Redactor 负责客户端位,我需要提供服务器端上传功能。
如果我使用 Request.Files
,让上传工作没有问题在 Controller 中。
但是我想将发布的文件绑定(bind)到模型,我似乎无法做到这一点,因为它们发送的参数是 files[]
- 名称中带有方括号。
我的问题:
是否可以绑定(bind)发布的"file[]"
到 MVC 模型?这是一个无效的属性名称,使用 file
单独是行不通的。
这个文件输入看起来像这样。我可以指定 file
以外的名称,但 Redactor 添加了 []
到最后,不管名字。
<input type="file" name="file" multiple="multiple" style="display: none;">
public HttpPostedFileBase[] File { get; set; }
Content-Disposition: form-data; name="file[]"; filename="my-image.jpg"
Redactor always sends the uploading request with content-type as multipart/form-data. So you don't need to add this enctype anywhere
最佳答案
您应该创建一个自定义模型绑定(bind)器以将上传的文件绑定(bind)到一个属性。
首先使用 HttpPostedFileBase[]
创建一个模型属性(property)
public class RactorModel
{
public HttpPostedFileBase[] Files { get; set; }
}
DefaultModelBinder
并覆盖
BindProperty
public class RactorModelBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
{
int len = controllerContext.HttpContext.Request.Files.AllKeys.Length;
if (len > 0)
{
if (propertyDescriptor.PropertyType == typeof(HttpPostedFileBase[]))
{
string formName = string.Format("{0}[]", propertyDescriptor.Name);
HttpPostedFileBase[] files = new HttpPostedFileBase[len];
for (int i = 0; i < len; i++)
{
files[i] = controllerContext.HttpContext.Request.Files[i];
}
propertyDescriptor.SetValue(bindingContext.Model, files);
return;
}
}
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
public class RactorModenBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(Type modelType)
{
if (modelType == typeof(RactorModel))
{
return new RactorModelBinder();
}
return null;
}
}
...
ModelBinderProviders.BinderProviders.Insert(0, new RactorModenBinderProvider());
关于asp.net-mvc - 如何将名为 "file[]"的发布数据绑定(bind)到 MVC 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52183638/
我是一名优秀的程序员,十分优秀!