Хороший способ показать или нет изображение с помощью MVC.net - PullRequest
0 голосов
/ 18 декабря 2009

Я новичок в ASp.net MVC, так что это может быть тривиально для вас. Тем не менее, мне нужно задать этот вопрос: хочу отображать изображение или нет в соответствии с логическим значением.

С classis asp.net я связывал свойство visible с моим логическим значением, а затем Hop, трюк был сделан. Но здесь это не работает таким образом. Я просмотрел Интернет и нашел способ борьбы с ним:

<%= Html.Image(this.ResolveUrl("~/attention.gif"),"dates invalid",myboolean) %>

с Html-хеплером такого типа:

public static string Image(this HtmlHelper helper,
                                    string url,
                                    string altText,
                                    bool IsVisible)
        {
            string returnvalue = string.Empty;
            if (IsVisible)
            {
                 TagBuilder builder = new TagBuilder("image");
                 builder.Attributes.Add("src", url);
                 builder.Attributes.Add("alt", altText);
                 builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
                 returnvalue = builder.ToString(TagRenderMode.SelfClosing);
            }
            return returnvalue;
        }

Я делаю правильно или есть что-то проще, что я не получил?

Ответы [ 4 ]

2 голосов
/ 18 декабря 2009

Как насчет этого?

<% if (myBoolean) { %>
    <%= Html.Image("myUrl", "altText") %>
<% } %>
2 голосов
/ 18 декабря 2009

Как насчет:

<% if (myboolean) { %>
  <img src="<%= Url.Content( "~/attention.gif" ) %>" alt="dates invalid" />
<% } %>

Это работает довольно хорошо для разовых. Если вам нужно было делать это часто, то инвестирование в расширение HtmlHelper кажется разумным, хотя вы можете использовать его из MVC Futures и просто использовать атрибут Html style="display: none;" и получить тот же эффект, не записывая свой собственный.

1 голос
/ 18 декабря 2009

Вроде бы неплохо, но я бы поменял

this.ResolveUrl("~/attention.gif")

до

HttpContext.Current.Server.MapPath(url)

вспомогательным методом. Таким образом, вы могли бы позвонить

<%= Html.Image("~/attention.gif","dates invalid",myboolean) %>

выглядит лучше, и вам не нужно повторять ResolveUrl.

1 голос
/ 18 декабря 2009

Этот код не создает скрытый элемент. Хотя это может быть именно тем, что вам нужно, вы должны понимать, что вы не можете использовать JS на стороне клиента, чтобы перевернуть его обратно на видимое, если этого требует логика вашего приложения.

Наличие специального HtmlHelper просто для вывода изображения на основе boolen кажется немного излишним. Сколько изображений у вас будет, что нужно показать / скрыть таким образом? Если это только один, просто подумайте о чем-то подобном:

<% if (myboolean) { %>
    <img src="<%= this.ResolveUrl("~/attention.gif") %> alt="dates invalid" />
<% } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...