.NET MVC Посмотреть вопрос - PullRequest
1 голос
/ 14 июня 2009

У меня есть эта симпатичная маленькая полоска прогресса на странице панели инструментов. После запуска он обновляется каждую минуту с помощью ajax, javascript, blah, blah. Так как некоторые из моих зрителей смотрят на него в старых Blackberry, я обычно выясняю, насколько большой должна быть полоса для начального рендеринга на стороне сервера, и соответственно рисую страницу, а затем позволяю javascript вступать во владение этим зрителем иметь его.

Старый код, обычный старый ASP.NET, имеет метку asp: на странице, где идет тег img, и на сервере я собираю все вместе. Когда я реорганизовал MVC-подход к взгляду на вещи, я подумал, как было бы замечательно записать только атрибут стиля ширины изображения на сервере. Код на странице будет гораздо более понятным.

Но это не работает. Пример:

<img src="/content/images/blue_1px.png" class="productionBar_variableBar" 
style="width: <% =dbd["ThisShiftProduction_variableBar"] %>;"/>

К сожалению, Visual Studio, похоже, не распознает экранирование <%%> внутри атрибута стиля в кавычках.

Есть предложения?

Siggy

Ответы [ 2 ]

3 голосов
/ 14 июня 2009

Самый простой способ - создать расширение HtmlHelper:

public static class Html
{
    public static string ProgressBar(this HtmlHelper html, int width)
    {
        StringBuilder sb = new StringBuilder();

        sb.AppendFormat("img src=\"/content/images/blue_1px.png\" class=\"productionBar_variableBar\" style=\"width: {0};\" />", width);

        return sb.ToString();
    }

    // OR

    public static string ProgressBar(this HtmlHelper html, int width, string src, string cssClass)
    {
        TagBuilder tagBuilder = new TagBuilder("img");
        tagBuilder.AddCssClass(cssClass);
        tagBuilder.MergeAttribute("style", "width: " + width.ToString());

        string srcUrl = new UrlHelper(html.ViewContext.RequestContext).Content(src);

        tagBuilder.MergeAttribute("src", srcUrl);

        return tagBuilder.ToString(TagRenderMode.Normal);
    }
}

Используя его:

<%= Html.ProgressBar(dbd["ThisShiftProduction_variableBar"]) %>

<!-- OR -->

<%= Html.ProgressBar(dbd["ThisShiftProduction_variableBar"], "~/content/images/blue_1px.png", "productionBar_variableBar") %>
2 голосов
/ 14 июня 2009

Вы пытались сделать это вместо

<img src="/content/images/blue_1px.png" class="productionBar_variableBar" style='width: <% =dbd["ThisShiftProduction_variableBar"] %>;'/>

Обратите внимание одинарные кавычки вместо двойных кавычек в атрибуте стиля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...