2010-02-01 53 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

相关问题