11
votes

MVC 3 RAZOR, Aides avec un marquage / section personnalisé

Je ne suis même pas sûr que cela soit possible, mais je pensais que je voudrais vérifier s'il y a un moyen de rendre cela plus facile.

Premier, j'ai un balisage répété sur mon site qui ressemble à ceci: xxx

Ce que je veux faire est de terminer cela dans une sorte d'assistant / section afin que je puisse faire quelque chose comme ça xxx

Ensuite, lorsque cela rend le titre, cela injecterait le titre transmis via le paramètre entre le

et le balisage personnalisé dans les divs. Le balisage personnalisé pourrait être n'importe quoi du test, pour former des contrôles, à une vue partielle. Est-ce quelque chose qui est possible?


0 commentaires

4 Réponses :


13
votes

Eh bien, voici une méthode "standard" de faire quelque chose de près, à l'aide d'une extension HTML Helper. Une version très simple de ce que html.beginform () code> fait.

Approche: retournez simplement une insensable et laissez le à l'aide de la déclaration code> prenant soin du reste. p>

Ceci est juste un exemple de concept (bien que cela fonctionne). Non destiné à une réutilisation immédiate. Écrit rapidement avec de nombreux raccourcis, non pas de code de production, de nombreuses possibilités d'amélioration et d'optimisation, peuvent avoir des erreurs idiotes, pourrait utiliser Tagbuilder, etc., etc., pourrait facilement être modifiée pour réutiliser la classe d'emballage pour ... des emballages (il peut même que Soyez déjà générique dans ASP.NET MVC - Je n'ai pas eu besoin d'un). P>

@using (Html.Wrap("Title"))
{
    <p>My very own markup.</p>
}


3 commentaires

Ceci est exactement ce que je cherchais.


Il y a un exemple plus simple à Stackoverflow .com / questions / 7196276 / ...


J'ai du mal à voir ce qui le rend plus simple, considérant que la solution est exactement la même ... Le seul code supplémentaire dans cet exemple est là pour répondre aux exigences de la question - et un contrôle rudimentaire pour éviter les effets secondaires du dispositif être appelé deux fois.



0
votes

Si vous utilisez RAZOR et MVC 3, il est vraiment facile d'écrire une méthode d'assistance rapide qui irait à l'intérieur du dossier App_code (je vais le nommer it myHTMLhelPers)

J'essayerais quelque chose d'un peu différent et un peu plus facile comme: xxx

et la façon dont vous l'utilisez à partir d'un fichier .cshtml est suivie: xxx it devrait fonctionner si je vous comprends correctement.


1 commentaires

Je ne veux pas que le balisage soit un paramètre de chaîne, car je souhaite avoir le balisage comme HTML régulier à mon avis. Ce que je cherche à faire, c'est imiter avec une aide à MVC 3 comment en MVC 2, vous auriez pu avoir <% en utilisant (html.beginform ()) {%> HTML Markup <%}%>



3
votes

@Thekaneda, merci pour la perspicacité. J'ai pris votre idée et l'a étendu, de sorte que vous fournissez un nom partielview et il sait comment analyser.

<div class="content"> 
    @@RenderBody()
</div>


0 commentaires

15
votes

Il y a aussi l'inverse de l'autre sens, sans astuce jetable, qui nécessite également un peu moins de travail, idéal pour les petits aides. XXX PRE>

L'utilisation de cet assistant ressemble à ceci: p> XXX PRE>

ou avec plusieurs lignes: P>

@MyHelper("This is my Title", 
    @<text>
        <p>More than one line</p>
        <p>Of markup</p>
    </text>
)


3 commentaires

J'aime cet exemple. Semble être beaucoup plus facile à mettre en œuvre. Pouvez-vous m'aider à résoudre un problème? Ceci.ViewContext ne compile pas car la méthode MyHelper est statique (au moins comme je l'ai configurée dans mon assistant).


Étonnamment, il a tendance à travailler aussi bien si vous le transmettez null, mais peut-être peut-être un scénario complexe qui s'écraserait. Quoi qu'il en soit, vous devriez pouvoir accéder à ViewContext via HTMLHelper Object (si votre méthode statique est la méthode d'extension HTML, vous devez avoir accès à celui-ci) à l'aide de la vue PropertyContext. Si ce n'est pas le cas, vous pourriez passer manuellement la vue Contencontext à la méthode.


Merci pour votre réponse. Passant NULL a travaillé. Je pense que la raison que mon code n'a pas eu accès à ViewContext est parce que je construisais un site MVC au lieu d'une application. Il fonctionne maintenant. Je crois que ta réponse est la meilleure parce que c'est simple et fonctionne.