2012-05-29 45 views
10

我有以下我的ASP.Net MVC 3 Razor视图ASP.Net MVC 3剃须刀字符串连接

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

工作正常,但是,我想串连同时显示的firstName字符串和姓氏,但是当我尝试这样做

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

我收到以下错误

模板只能与现场访问,访问属性,一维数组我使用ndex或单参数自定义索引器表达式

有谁知道如何连接Razor视图中的字符串吗?

谢谢大家。

编辑

我的Razor视图接受一个视图模型看起来像这样

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

我想提出FullName属性在这里,罗伊的建议,但是,我不知道如何让它工作?

+1

tg - 根据你的编辑,你必须根据Roy的建议修改你的Note类,那么它将在没有进一步改变的情况下工作(当然除了' @ Html.DisplayFor(modelItem => modelItem.FullName)'part :))如果无法更改Note类,那么您可能必须创建一个包含级联属性的映射类,然后在您的'ViewModelFormNoteList'类中使用该类 –

+0

Jim - Thanks,this说得通。 – tgriffiths

+0

+1给Jim ...... –

回答

16

DisplayFor需要一个属性映射到,所以一个串联是不可能的。你可能在你的模型,然后返回串联暴露出只读属性全名:

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

,然后用它在你的DisplayFor

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

我喜欢你的解决方案,但是,我不确定它是否能与我的ViewModel类一起工作,请看我的更新问题。谢谢。 – tgriffiths

+0

这对我有用。 – steveareeno

+1

正确的解决方案是在视图中进行拼接,因为它是视图的一部分 –

1

你可以这样做:

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

或者这将是更好的解决方案拥有财产全名模型

4

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