2009-06-13 6 views
1

J'ai cette jolie petite barre de progression dans une page de tableau de bord. Une fois démarré, il se met à jour chaque minute via ajax, javascript, blah, blah. Étant donné que certains de mes spectateurs le regardent sur Blackberries plus anciens, je détermine normalement la taille de la barre pour le rendu initial côté serveur, et dessine la page en conséquence, puis laisse le javascript prendre le dessus, sur les spectateurs qui l'avoir..NET MVC Voir la question

L'ancien code, ASP.NET plaine vieux a un asp: Étiquette dans la page où la balise img va, et sur le serveur je chat ensemble le tout. Comme je refactor à une façon MVC de regarder les choses, j'ai pensé combien il serait merveilleux d'écrire seulement l'attribut de style de largeur de l'image sur le serveur. Le code sur la page serait beaucoup plus compréhensible de cette façon.

Mais cela ne fonctionne pas. Exemple:

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

Malheureusement, Visual Studio ne semble pas reconnaître la <%%> échapper à l'intérieur de l'attribut de style cité.

Des suggestions?

Siggy

Répondre

2

Avez-vous essayé de faire cela au lieu

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

Avis les guillemets simples au lieu des guillemets doubles dans l'attribut de style

+0

Merci, dswatik, qui l'a fait, bien que je ne vois que VS2k8 ne comprend toujours pas ce qui se passe et mettre en évidence les choses correctement. – SiggyTheViking

3

La plus simple façon - la création d'extension 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); 
    } 
} 

Son utilisation:

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

<!-- OR --> 

<%= Html.ProgressBar(dbd["ThisShiftProduction_variableBar"], "~/content/images/blue_1px.png", "productionBar_variableBar") %> 
+0

Et une méthode très propre et réutilisable. –

+0

Merci à vous, eu-ge-ne. Je vais essayer celui-ci pour la taille pour voir si je l'aime. Cheers. – SiggyTheViking