2012-05-29 51 views
10

tengo el siguiente en mi ASP.Net MVC 3 Razor VerASP.Net MVC 3 Razor Concatenate cadena

@foreach (var item in Model.FormNotes) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.User.firstName) 
    </td> 
</tr> 
} 

que funciona muy bien, sin embargo, me gustaría para concatenar la cadena que se mostrará tanto el nombre y primer lastName, pero cuando trato de hacer esto

<td> 
    @Html.DisplayFor(modelItem => item.User.firstName + @item.User.lastName) 
</td> 

me sale el siguiente error

las plantillas se pueden utilizar solamente con el acceso de campo, acceso a la propiedad, una matriz unidimensional i ndex, o expresiones de indizador personalizadas de un solo parámetro

¿Alguien sabe cómo concatenar una cadena en una vista de maquinilla de afeitar?

Gracias a todos.

EDITAR

Mi Razor Ver acepta un modelo de vista que se parece a este

public class ViewModelFormNoteList 
{ 
    public IList<Note> FormNotes { get; set; } 
} 

Me gustaría mostrar la propiedad FullName aquí, según lo sugerido por Roy, sin embargo, no estoy seguro cómo hacerlo funcionar?

+1

tg - según su edición, tendría que modificar su clase 'Note' según la sugerencia de Roy, entonces todo funcionaría sin más cambios (que no sea el' @ Html.DisplayFor (modelItem => modelItem.FullName) 'part :)) si no es posible cambiar la clase Note, entonces debe crear una clase de mapeo que incluya la propiedad de concatenación y luego usar eso en su' ViewModelFormNoteList' clase –

+0

Jim - Thanks, this tiene sentido. – tgriffiths

+0

+1 a Jim ...... –

Respuesta

16

DisplayFor necesita una propiedad para asignar, por lo que una concatenación es imposible. Es posible exponer una NombreCompleto propiedad de sólo lectura de su modelo, que luego devuelve la concatenación:

public string FullName 
{ 
    get 
    { 
     return User.FirstName + " " + User.LastName; 
    } 
} 

y luego usar eso en su DisplayFor.

@Html.DisplayFor(modelItem => modelItem.FullName); 
+0

Me gusta su solución, sin embargo, no estoy seguro de si funcionará con mi clase de ViewModel. Consulte mi Pregunta actualizada. Gracias. – tgriffiths

+0

Esto funcionó para mí. – steveareeno

+1

solución correcta es tener la concatenación a la vista, porque es la parte de trabajo de la vista –

1

Usted puede hacer esto:

@foreach (var item in Model.FormNotes) { 
var conc = item.User.FirstName + item.User.LastName; 
<tr> 
    <td> 
     @Html.Display(conc) 
    </td> 
</tr> 
} 

O sería mejor solución para tener NombreCompleto propiedad en el modelo

4

@ Html.DisplayFor (ModelItem => item.FirstName) @Html. DisplayFor (modelItem => item.LastName)

Cuestiones relacionadas