2012-05-29 7 views
10

Ho la seguente nel mio ASP.Net MVC 3 Razor vistaASP.Net MVC 3 Razor Concatenate String

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

che funziona bene, però, vorrei concatenare la stringa da visualizzare sia il Nome e lastName, ma quando provo a fare questo

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

ottengo il seguente errore

I modelli possono essere utilizzati solo con l'accesso di campo, l'accesso alle proprietà, un array monodimensionale i ndex, o espressioni di indicizzazione personalizzate a parametro singolo

Qualcuno sa come concatenare una stringa in una visualizzazione a rasoio?

Grazie a tutti.

EDIT

mio rasoio View accetta un ViewModel che assomiglia a questo

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

vorrei mettere la proprietà FullName qui, come suggerito da Roy, tuttavia, non sono sicuro come farlo funzionare ???

+1

tg - come per la tua modifica, dovresti modificare la tua classe 'Note' secondo il suggerimento di Roy, quindi funzionerebbe tutto senza ulteriori cambiamenti (oltre ovviamente al' @ Html.DisplayFor (modelItem => modelItem.FullName) 'part :)) se non è possibile modificare la classe Note, potrebbe essere necessario creare una classe di mapping che includa la proprietà di concatenazione e quindi utilizzarla nella classe' ViewModelFormNoteList' Jim –

+0

- Grazie, questo ha senso. – tgriffiths

+0

+1 a Jim ...... –

risposta

16

DisplayFor ha bisogno di una proprietà su cui mappare, quindi una concatenazione è impossibile. Si potrebbe esporre una proprietà FullName di sola lettura del modello, che poi restituisce la concatenazione:

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

e quindi utilizzare che nel tuo DisplayFor.

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

Mi piace la tua soluzione, tuttavia, non sono sicuro che funzionerà con la mia classe ViewModel, per favore guarda la mia domanda aggiornata. Grazie. – tgriffiths

+0

Questo ha funzionato per me. – steveareeno

+1

la soluzione corretta è avere una vista in vista, perché è la parte di lavoro della vista –

1

È possibile farlo:

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

O sarebbe meglio avere una soluzione FullName proprietà a modello

4

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