Concatenación de ASP.NET MVC Razor


95

Estoy intentando renderizar una lista HTML que se parece a la siguiente, usando el motor de vista de Razor:

<ul>
  <li id="item_1">Item 1</li>
  <li id="item_2">Item 2</li>
</ul>

El código que estoy intentando usar para representar esta lista es:

<ul>
@foreach (var item in Model.TheItems)
{            
  <li id="item_@item.TheItemId">Item @item.TheItemId</li>
}
</ul>

El analizador se está ahogando porque cree que todo lo que está a la derecha del guión bajo en el atributo id es texto sin formato y no debe analizarse. No estoy seguro de cómo instruir al analizador para que represente TheItemId.

No quiero, sino una propiedad en el objeto modelo que incluye el prefijo item_.

También tengo que mantener esta sintaxis ya que estoy usando la lista con JQuery Sortable y con la función serializar que requiere que el atributo id se formatee en esta sintaxis.

Respuestas:


207

Debes envolver la parte interna de la llamada con ( ):

<li id="item_@(item.TheItemId)">

3
Comencé con String.Format pero prefiero la sintaxis y la brevedad de su respuesta, la estoy marcando como mi respuesta preferida.
David Marchelya

Estoy usando Visual Studio 2013 y ASP.NET MVC 5, y esto no funciona (la cadena está configurada como está , incluidos @y los paréntesis) ... Lo que finalmente funcionó para mí fue lo muy desagradable id="foo" + Model.Bar.
Ian Campbell

Esto me dio la variable entre paréntesis. Parece que Razor ahora entiende que un guión bajo + una variable = una cadena + una variable.
Hugh Seagraves

26

¿Qué tal usar String.Format ? Me gusta esto:

<li id="@String.Format("item_{0}", item.TheItemId)">


Esto no se está analizando correctamente, debido a las comillas dobles anidadas ... ¿deberían las comillas interiores ser comillas simples y las comillas dobles exteriores, algo así como id="@String.Format('foo{0}', item.Bar)"?
Ian Campbell

10

Yo prefiero:

<li id="@String.Concat("item_", item.TheItemId)">

La verbosidad les dice a los desarrolladores de soporte exactamente lo que está sucediendo, por lo que es claro y fácil de entender.


2

Incluso puede usar esta forma para concatizar más cadenas :

<li id="@("item-"+item.Order + "item_"+item.ShopID)" class="ui-state-default"></li>

Aquí hay otra publicación.

La esperanza ayuda a alguien.



0

Esta publicación parece ser más antigua, pero ahora funciona en la última MVC:

id="item_@item.TheItemId"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.