2010-02-01 52 views
5

我建立的數據表這樣有沒有辦法來設置HideSurroundingHtml值ASP.MVC 2

<% foreach (var person in Model.People) 
{ 
%> 
    <tr> 
     <td><%= Html.ActionLink(accessory.Name, "EditPerson") %></td> 
     <td><%= Html.DisplayFor(c => person.Name) %></td> 
     <td><%= Html.DisplayFor(c => person.Age) %></td> 
     <td><%= Html.DisplayFor(c => person.Budget)%></td> 
    </tr> 
<%} %> 

我創建模板來覆蓋缺省值以下Brad Wilson's tutorial

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 
<script runat="server"> 
    protected override void OnInit(EventArgs e) { 
     base.OnInit(e); 

     if (ViewData.ModelMetadata.HideSurroundingHtml) { 
      TablePlaceholder.Visible = false; 
     } 
     else { 
      Controls.Remove(Data); 
      DataPlaceholder.Controls.Add(Data); 
     } 
    } 
</script> 
<asp:ContentPlaceHolder runat="server" id="Data" /> 
<asp:PlaceHolder runat="server" id="TablePlaceholder"> 
    <table cellpadding="0" cellspacing="0" border="0" width="100%"> 
     <tr> 
      <td style="width: 10em;"> 
       <div class="display-label" style="text-align: right;"> 
        <asp:ContentPlaceHolder runat="server" id="Label"> 
         <%= ViewData.ModelMetadata.GetDisplayName() %> 
        </asp:ContentPlaceHolder> 
       </div> 
      </td> 
      <td> 
       <div class="display-field"> 
        <asp:PlaceHolder runat="server" id="DataPlaceholder" /> 
       </div> 
      </td> 
     </tr> 
    </table> 
</asp:PlaceHolder> 

在渲染表格時,我不想顯示周圍的HTML,但我不知道如何設置HideSurroundingHtml值?

回答

3

一個更清潔,更清晰的方式來做到這一點會是這樣:

public class MyModel 
{ 
    [AdditionalMetadata("HideSurroundingHtml", true)] 
    public string Something { get; set; } 
} 

而在你的看法:

bool hideSurroundingHtml = (this.ViewData.ModelMetadata.AdditionalValues.ContainsKey("HideSurroundingHtml") ? (bool)this.ViewData.ModelMetadata.AdditionalValues["HideSurroundingHtml"] : false); 

if (!hideSurroundingHtml) 
{ 
    @:<div> 
} 

//Content. 

if (!hideSurroundingHtml) 
{ 
    @:</div> 
} 
+0

我喜歡這個解決方案。 – adriaanp 2011-09-30 11:22:02

+0

謝謝,我仍然不會爲所有你需要的if語句變得笨重,但我認爲這是一個非常簡單的方法。 – 2011-09-30 13:45:10

+0

請注意,這種技術創建並訪問'AdditionalValues'字典中的一個條目,並且實際上並沒有在'ModelMetadata'本身中設置'HideSurroundingHtml'標誌;不直觀的是,國旗仍然是虛假的。 – Suncat2000 2018-01-09 15:24:25

10

按照MSDN page on ModelMetadata.HideSurroundingHtml Property

當此屬性與 DataAnnotationsModelMetadataProvider 模型元數據提供者使用,它被設置爲 真當兩個 HiddenInputAttribute屬性爲true 和DisplayValue屬性設置 爲false。

因此,你需要用這個來裝飾你的財產你的模型:

[HiddenInput(DisplayValue = false)] 

我沒有任何意義,我,但它似乎工作!

+2

我得試試它,但是從內心的感覺,我認爲它將使用隱藏的模板進行渲染,而不是我想要的模板。 – adriaanp 2010-02-15 21:42:52

+0

@adriaanp這可能會導致它使用'HiddenInput'模板,但是您可以在同一個屬性上使用'UIHint'屬性覆蓋它。 – TLS 2011-02-25 18:17:43

相關問題