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

adr*_*anp 6 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>
<%} %>
Run Code Online (Sandbox Code Playgroud)

我已经创建了模板来覆盖Brad Wilson教程之后的默认值:

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

渲染表时我不想显示周围的HTML,但我不知道如何设置HideSurroundingHtml值?

Jon*_*ell 11

根据ModelMetadata.HideSurroundingHtml属性上MSDN页面:

当此属性与DataAnnotationsModelMetadataProvider模型元数据提供程序一起使用时,如果HiddenInputAttribute属性为true且DisplayValue属性设置为false,则将其设置为true.

因此,您需要使用以下方法在模型中装饰您的属性:

[HiddenInput(DisplayValue = false)]
Run Code Online (Sandbox Code Playgroud)

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

  • 我将不得不尝试它,但从内心的感觉,我认为它将使用隐藏的模板而不是我想要的模板进行渲染. (2认同)

Jos*_* M. 4

一种更干净、更清晰的方法是这样的:

public class MyModel
{
    [AdditionalMetadata("HideSurroundingHtml", true)]
    public string Something { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而在你看来:

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

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

//Content.

if (!hideSurroundingHtml)
{
    @:</div>
}
Run Code Online (Sandbox Code Playgroud)