Есть ли способ установить значение HideSurroundingHtml в ASP.MVC 2 - PullRequest
6 голосов
/ 02 февраля 2010

Я создаю таблицу данных, как это

<% 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>
<%} %>

Я создал шаблоны для переопределения значений по умолчанию, следуя Учебное пособие Брэда Уилсона :

<%@ 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 ]

11 голосов
/ 15 февраля 2010

Согласно странице MSDN в свойстве ModelMetadata.HideSurroundingHtml :

Когда это свойство используется с поставщиком метаданных модели DataAnnotationsModelMetadataProvider, для него устанавливается значение true, когда оба объекта HiddenInputAttributeАтрибут имеет значение true, а свойство DisplayValue установлено в значение false.

Так что вам нужно украсить ваше свойство в вашей модели следующим образом:

[HiddenInput(DisplayValue = false)]

Я не имею никакого смысламне, но, кажется, работает!

3 голосов
/ 29 сентября 2011

Более чистый и понятный способ сделать это будет выглядеть так:

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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...