【发布时间】:2012-08-16 08:47:08
【问题描述】:
我有一个图像上传器编辑器模板,该模板目前是 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 时,我得到一个“对象引用未设置为对象的实例”。错误。代码如下:
Controller 将 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>
任何想法都将不胜感激:)
【问题讨论】:
标签: c# asp.net-mvc-3 templates editor viewmodel