2012-05-29 128 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)