.NET MVC查看问题

时间:2009-06-13 21:48:18

标签: asp.net-mvc

我有一个可爱的小进度条在仪表板页面看东西。一旦它启动,它每分钟通过ajax,javascript,blah,blah更新自己。由于我的一些观众在较旧的黑莓上看它,我通常会弄清楚初始渲染服务器端的条形图有多大,并相应地绘制页面,然后让javascript接管,在那些观众身上拥有它。

旧的代码,普通的旧ASP.NET在img标签所在的页面中有一个asp:Label,在服务器上我把整个东西拼凑在一起。当我重构MVC查看事物的方式时,我认为只在服务器上编写图像的宽度样式属性是多么美妙。通过这种方式,页面上的代码会更容易理解。

但它不起作用。例如:

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

不幸的是,Visual Studio似乎无法识别&lt; %%&gt;在引用的样式属性中转义。

有什么建议吗?

Siggy

2 个答案:

答案 0 :(得分:3)

最简单的方法 - 创建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") %>

答案 1 :(得分:2)

您是否尝试过这样做

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

注意单引号而不是样式属性

中的双引号