我有一个图像上传器编辑器模板,它目前被强输入到 MultiImageUploader 视图模型。问题是我有一些自定义数据验证属性,我想在直接调用编辑器模板的视图模型中使用它们,而不是通过 MultiImageUploader 视图模型进行路由。
而不是调用具有预设验证属性的 MultiImageUploader 视图模型,我想做这样的事情:
public class CreateBrandViewModel
{
.....<snipped>.....
[PermittedFileExtensions("jpg, jpeg, png, gif")]
[MaxFileSize("2MB")]
[UIHint("MultiImageUploader")]
public HttpPostedFileBase Image { get; set; }
//Currently this view model looks like this:
//public MultiImageUploader Image { get; set; } <-- seperate view model
}
我目前无法使用我的首选方式,因为我的编辑器模板没有针对 CreateBrandViewModel 进行强类型化。有没有办法可以将调用视图模型的 @model 传递到编辑器模板视图中?:
@model // Here? //
<div class="editor-field">
@Html.TextBoxFor(x => x.Image, new { type = "file" })
@Html.ValidationMessageFor(x => x.Image)
</div>
编辑 1
只是为了澄清,我想这样做的原因是因为我想从图像上传器更改为通用文件上传器 - 这需要在不同的视图模型上使用不同的验证属性。为此,目前我需要为每个稍微不同的验证参数变体创建不同的视图模型和编辑器模板。
编辑2:关于@Joel Athertons 的回答
我在尝试实现这一点时遇到了一些问题(或者我可能只是没有正确理解)。
我已经创建了接口和抽象类。我的 CreateBrandViewModel 现在继承自 FileUpload。FileUpload 当前为空,没有共享属性。当我尝试 model.GetType().Name 时,我得到一个“对象引用未设置为对象的实例”。错误。代码如下:
控制器将 CreateBrandViewModel 传递给视图:
[HttpGet]
public ActionResult Create()
{
var model = new CreateBrandViewModel();
model.IsActive = true;
return View(model);
}
Create 视图然后调用 EditorTemplate:
@model CumbriaMD.Infrastructure.ViewModels.BrandViewModels.CreateBrandViewModel
@Html.EditorFor(model => model.File, "EditorTemplates/MultiImageUploader")
然后模板(为了简单起见)看起来像这样:
@model CumbriaMD.Infrastructure.ViewModels.FileUploadViewModels.FileUpload
@{
var partialView = Model.GetType().Name;
}
<h1>@partialView</h1>
任何想法,将不胜感激 :)