ASP.Net MVC 3 Строка конкатенации бритвы
У меня есть следующее в моем ASP.Net MVC 3 Razor View
@foreach (var item in Model.FormNotes) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.User.firstName)
</td>
</tr>
}
Что хорошо работает, однако, я хотел бы объединить строку, чтобы отображать как firstName, так и lastName, но когда я пытаюсь сделать это
<td>
@Html.DisplayFor(modelItem => item.User.firstName + @item.User.lastName)
</td>
Я получаю следующую ошибку
Шаблоны могут использоваться только с доступом к полю, доступом к ресурсам, индексом одномерного массива или однопараметрическими выражениями пользовательского индексатора
Кто-нибудь знает, как конкатенировать строку в представлении Razor?
Спасибо всем.
ИЗМЕНИТЬ
My Razor View принимает ViewModel, который выглядит как
public class ViewModelFormNoteList
{
public IList<Note> FormNotes { get; set; }
}
Я хотел бы поместить здесь свойство FullName, как полагает Рой, однако я не уверен, как заставить его работать.
Ответы
Ответ 1
DisplayFor
требуется свойство для сопоставления, поэтому конкатенация невозможна. Вы можете открыть свойство FullName для чтения только для своей модели, которое затем возвращает конкатенацию:
public string FullName
{
get
{
return User.FirstName + " " + User.LastName;
}
}
а затем используйте это в DisplayFor
.
@Html.DisplayFor(modelItem => modelItem.FullName);
Ответ 2
@Html.DisplayFor(modelItem => item.FirstName) @Html.DisplayFor(modelItem => item.LastName)
Ответ 3
Вы можете сделать это:
@foreach (var item in Model.FormNotes) {
var conc = item.User.FirstName + item.User.LastName;
<tr>
<td>
@Html.Display(conc)
</td>
</tr>
}
Или было бы лучшим решением иметь свойство FullName в модели
Ответ 4
Новичок в Razor, так что простите за простые вопросы. Где бы я создал класс "полное имя" в модели для самой БД? Я попытался там, и он не узнал основной класс БД.
Ответ 5
Или же:
@Html.Display(String.Concat(item.User.FirstName.Trim()," ",User.LastName.Trim()))