有没有办法在ASP.MVC 2中设置HideSurroundingHtml值

时间:2010-02-01 21:06:49

标签: model-view-controller asp.net-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值?

2 个答案:

答案 0 :(得分:11)

根据MSDN page on ModelMetadata.HideSurroundingHtml Property

  

当此属性与。一起使用时   DataAnnotationsModelMetadataProvider   模型元数据提供程序,它被设置为   两者都是真的   HiddenInputAttribute属性为true   并设置DisplayValue属性   为假。

所以你需要用你的模型装饰你的房产:

[HiddenInput(DisplayValue = false)]

我对我没有任何意义,但似乎有效!

答案 1 :(得分: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>
}