2011-01-27 15 views
5

Estoy usando una edición en formato vectorial, he mostrado un código parcial a continuación. La etiqueta del script se repite para cada una de las filas que está procesando la vista parcial.script en mvc razor editortemplate

¿Hay alguna forma de colocar la etiqueta del script en el encabezado de la página o, como mínimo, incluirla en la página una sola vez?

Me gustaría el código en la vista parcial ya que es donde realmente pertenece.


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

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

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

Respuesta

2

Usted podría intentar esto:

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

y luego otro editor de plantillas para un solo contacto:

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

Esta podría ser una opción, parece fragmentada. Voy a codificar tres plantillas para cada cuadrícula editable. Quizás necesite volver a mirarlo y hacer todo de otra manera. – Jim

+0

@Jim, sí, poner la secuencia de comandos en la vista principal parece una mejor opción. –

+0

No estoy contento con esto, pero es la respuesta correcta. Decidí factorizar las cosas de una manera completamente diferente. – Jim

0

Hmm. Este es mi 2c, pero si no se supone que el script se repita, entonces la plantilla no es el lugar correcto.

Cómo sobre el uso de un Html Helper

+0

usando un ayudante podría ser una opción. ¿Es posible que el ayudante agregue la etiqueta del script al encabezado de alguna manera? Lo que trato de hacer aquí es incluir una plantilla de edición de script java en la fila displaytemplate. La plantilla de edición pertenece a la fila. * no * al modelo, entonces en ese sentido está en el lugar correcto. – Jim

0

finalmente tener una solución para esto que parece funcionar de manera confiable, al menos en ASP.NET MVC3. He aquí un extracto de mi editor de plantillas dirección:

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

Context.Items parece hecho para este fin. Persiste en varias llamadas al mismo EditorTemplate, pero solo para una solicitud de página completa.