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???

1
  • 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 Commented May 29, 2012 at 11:58

4 Answers 4

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);
Sign up to request clarification or add additional context in comments.

4 Comments

I like your solution, however, I am not sure if it will work with my ViewModel class, please look at my Updated Question. Thanks.
right solution is to have concatenation in view, because it's view's part of job
DisplayFor is a helper method for use in Views exclusively. So the solution here is perfectly fine.
Great solution!
7
 @Html.DisplayFor(modelItem => item.FirstName) @Html.DisplayFor(modelItem => item.LastName)

Comments

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

Comments

1

If you don't have a requirement to use DisplayFor, here is the syntax to join different strings in .cshtml files:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.