14

I have the following in my ASP.Net MVC 3 Razor View

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

Which works fine, however, I would like to concatenate the string to display both the firstName and lastName, but when I try to do this

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

I get the following error

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions

Does anyone know how to concatenate a string in a Razor View?

Thanks all.

EDIT

My Razor View accepts a ViewModel which looks like this

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

I would like to put the FullName property in here, as suggested by Roy, however, I am not sure how to get it working???

tcode
  • 5,055
  • 19
  • 65
  • 124
  • 1
    tg - as per your edit, you'd have to amend your `Note` class as per Roy's suggestion, then it would all work without further change (other than of course the `@Html.DisplayFor(modelItem => modelItem.FullName)` part :)) if it's not possible to change the Note class, then you may have to create a mapping class which includes the concatenation property and then use that in your `ViewModelFormNoteList` class – jim tollan May 29 '12 at 11:58

4 Answers4

19

DisplayFor needs a property to map to, so a concatenation is impossible. You might expose a read-only property FullName on your model, which then returns the concatenation:

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

and then use that in your DisplayFor.

@Html.DisplayFor(modelItem => modelItem.FullName);
Roy Dictus
  • 32,551
  • 8
  • 60
  • 76
7
 @Html.DisplayFor(modelItem => item.FirstName) @Html.DisplayFor(modelItem => item.LastName)
Adriaan
  • 17,741
  • 7
  • 42
  • 75
user2243661
  • 71
  • 1
  • 1
3

You can do this:

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

Or it would be better solution to have property FullName in model

karaxuna
  • 26,752
  • 13
  • 82
  • 117
0

Here is the syntax to join different strings in .CSHTML

@($"{User.FirstName} {User.MiddleName} {User.LastName}")