2013-08-02 71 views
0

我有下面的屬性在我的模型:Modelmetadata附加值總是空MVC4

[Required] 
    [UIHint("DropDownList")] 
    [AdditionalMetadata("Source", "Party.Organization.Caption")] 
    public int PartyId { get; set; } 

我試圖讓鑑於額外的元數據值如下:

object s = ViewData.ModelMetadata.AdditionalValues["Source"]; 

但它始終是返回計數爲0.

不確定,爲什麼有人建議請問?

完整視圖:

@model IEnumerable<object> 
@using System.Reflection; 
@using r2d2Web.Extensions; 
@using d2Utils.Extensions.d2Type; 
@using d2Utils.Reflection; 
@using System.Collections; 

@{ 
Type mdlType = Model.First().GetType(); 
PropertyInfo keyProp = mdlType.GetKeyProperty(); 
IEnumerable<PropertyInfo> props = mdlType.EditorProps(); 
Hashtable parties = (Hashtable)ViewData["Parties"]; 
Hashtable partyroles = (Hashtable)ViewData["Partyroles"]; 
} 
<div class="grid"> 

    <table> 
    <thead> 
     <tr> 
      @foreach (var prop in props) 
      { 
      <th>@prop.Name</th> 
      } 
      <th></th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var obj in Model) 
     {    
     <tr> 
      @foreach (var prop in props) 
      { 
       if (prop.Name == "PartyId") 
       { 
       object s = ViewData.ModelMetadata.AdditionalValues["Source"]; 
       <td>@(obj.GetValForProp<string>(s.ToString()))</td>  
       } 
       else if (prop.Name == "PartyRoleTypeId") 
       { 
        <td>@partyroles[obj.GetValForProp<int>(prop.Name)]</td>     
       } 
       else 
       { 
        <td>@(obj.GetValForProp<string>(prop.Name))</td>     
       } 
      } 
      <td> 
       @Html.ActionLink("Edit", "Edit", new { id = obj.GetValForProp<int>(keyProp.Name) }) | 
      </td> 
     </tr> 
     } 
    </tbody> 
</table> 
</div> 
<div id="my-dialog"></div> 

回答

1

你是不是爲獲得額外的元數據指定字段。嘗試做這樣的:

@ViewData.ModelMetadata.Properties.FirstOrDefault(n => n.PropertyName == "PartyId").AdditionalValues["Source"] 

如果你在強類型與包含PartyId更好的選擇是要使用的類型

@ModelMetadata.FromLambdaExpression(x => x.PartyId, ViewData).AdditionalValues["Source"] 
+0

與第一個視圖模型,我越來越不設置對象引用到我得到的exception.null引用異常的一個實例。 – mmssaann