2013-12-23 68 views
0

我想用我的自定義資源上傳模板上傳的資源爲我的模型,但我不能找到一個辦法讓FileExtensions數據註解屬性的元數據:MVC中的自定義編輯模板使用FileExtensionsAttribute

視圖模型

public class ItemViewModel{ 
    [Required] 
    public Name {get;set;} 

    [Required] 
    [Display(Name = "Resource"), FileExtensions(Extensions = ".res")] 
    public UploadedResourceID{get;set;} 
} 

查看

@Html.LabelFor(model => model.Name) 
@Html.ValidationMessageFor(model => model.Name) 
@Html.TextBoxFor(model => model.Name) 
@* My Resource Uploader *@ 
@Html.EditorFor(model => model.UploadedResourceID, "ResourceUploader") 

RES ourceUploader EditorTemplate

@model Guid? 
@Html.LabelFor(model => model) 
@Html.ValidationMessageFor(model => model) 
@Html.HiddenFor(model => model) 
<input 
     id="My_Custom_Ajax_Uploader_That_Populates_The_Hidden_Field" 
     accept="@Html.ViewContext.ViewData.ModelMetadata.???????" 
/> 
... some ajax logic to upload the resource ... 

我通過ModelMetadata「在我的模板字段看了看,也沒有找到一個辦法讓FileExtensions屬性。

+0

本屬性只驗證該擴展是你說的話是應該的。我不認爲它提供了其他許多。 –

+0

@MikeCheel,以及我將它看作是HTML呈現隱藏輸入的數據屬性(所以它以某種方式傳遞到模板中),所以我只是想知道我是否可以在我的EditorTemplate視圖中訪問它。 –

回答

0

發現了一個莫名其妙醜陋的方式來實現這一目標:

var metaData = Html.ViewContext.ViewData.ModelMetadata; 
var prop = metaData.ContainerType.GetProperty(metaData.PropertyName); 
var fileExtAttrs = prop.GetCustomAttributes(typeof (FileExtensionsAttribute), false); 
相關問題