2011-01-27 2 views
5

J'utilise un editortemplate, j'ai montré le code partiel ci-dessous. La balise de script se répète pour chacune des lignes affichées par la vue partielle.script dans mvc rasoir editortemplate

Existe-t-il un moyen d'obtenir l'étiquette de script dans l'en-tête de la page, ou à tout le moins l'inclure dans la page une seule fois?

Je voudrais que le code dans la vue partielle comme c'est là où il appartient vraiment.


@* DisplayTemplates/contact.cshtml *@ 
@model Online.Web.Contacts.Contact 

<script id="xxx"> 
    stuff here. 
</script> 

<tr> 
    <td>@Html.EditorFor(x => x.FirstName)</td> 
</tr> 

Répondre

2

Vous pouvez essayer ceci:

@model IEnumerable<Online.Web.Contacts.Contact> 
<script id="xxx"> 
    stuff here. 
</script> 
@Html.EditorForModel() 

puis un autre modèle de l'éditeur pour un contact unique:

@model Online.Web.Contacts.Contact 
<tr> 
    <td>@Html.EditorFor(x => x.FirstName)</td> 
</tr> 
+0

Cela pourrait être une option, il semble juste fragmenté. Je vais coder trois modèles pour chaque grille modifiable. J'ai peut-être besoin de le relooker et de tout faire différemment. – Jim

+0

@Jim, oui mettre le script dans la vue principale semble être une meilleure option. –

+0

Je ne suis pas content de ça - mais c'est la bonne réponse. J'ai décidé de factoriser les choses d'une manière complètement différente. – Jim

0

Hmm. C'est mon 2c, mais si le script n'est pas censé se répéter, alors le template n'est pas le bon endroit?

Que diriez-vous à l'aide d'un Html Helper

+0

en utilisant un assistant pourrait être une option. Est-il possible d'obtenir l'aide d'ajouter l'étiquette de script à l'en-tête en quelque sorte? Ce que j'essaie de faire ici est d'inclure un modèle d'édition de script Java dans le displaytemplate de ligne. Le modèle d'édition appartient à la ligne. * pas * au modèle, donc dans ce sens il est au bon endroit. – Jim

0

j'ai enfin une solution pour cela que semble fonctionner de manière fiable, au moins dans ASP.NET MVC3. Voici un extrait de mon modèle d'éditeur d'adresses:

@if(!Context.Items.Contains("AddressScriptsDone")) 
{ 
    Context.Items.Add("AddressScriptsDone", "true"); 
    <script type="text/javascript" src="@Url.Content("~/Scripts/Address.js?" + _Config.WebAppVersion)"></script> 
} 

Contexte.Il semble que ce soit fait dans ce but. Il persiste sur plusieurs appels au même EditorTemplate, mais uniquement pour une requête de page complète.

Questions connexes