2012-09-18 111 views
1

我用一個簡單的for循環這樣的輸出存儲在數據庫中的圖像的表變量:包括剃刀循環

@for(var i = 1; i < 7; i++){ 
<tr> 
<td>Image @i:</td> 
<td><img src="images/@image01" /></td> 
</tr> 
} 

我想要做的就是用我的變量在像場名稱,因爲在上例中,顯然每個圖像都是相同的,來自image01字段。我嘗試了以下,但它不起作用。有誰知道正確的方式來編碼?

@for(var i = 1; i < 7; i++){ 
<tr> 
<td>Image @i:</td> 
<td><img src="images/@[email protected]" /></td> 
</tr> 
} 

我已經嘗試了各種各樣的東西,但我只是學習來自ASP經典的剃刀語法,所以我只是猜測此刻。

乾杯, 千電子伏

回答

0

如果image01是一個領域,你不能動態地創建一個變量名,你要做的:

@for(var i = 1; i < 7; i++){ 
string imgName; 
if (i == 0) 
    imgName = image01; //store the var in a central variable 
else if (i == 1) 
    imgName = image02; 
else if ... 

<tr> 
<td>Image @i:</td> 
<td><img src="images/@imgName" /></td> 
</tr> 
} 

唯一的其他選擇是反射,但我不在Razor的觀點中,這是如何做到的。

+0

謝謝布賴恩,但我得到以下錯誤:「@」在代碼塊的開頭無效 –

+0

我認爲這可能是我必須去的方式。 –

+0

@KevinUnderhill哪一行導致錯誤?我的語法可能有點偏離...不幸的是,除非使用列表或數組來存儲名稱或替代設計模式,否則沒有好的變量名稱生成功能。 –

0

使用明確表達

<img src="images/[email protected](i)" /> 

這會給你的輸出像

<img src="images/image01"> 
<img src="images/image02"> 
<img src="images/image03"> 

理想情況下,我會盡量避免使用這樣的循環,並在創建視圖圖像URL值。相反,我將有圖像集合在我的ViewModel

public class UserProfile 
{ 
    public string Name { set;get;} 
    public List<UserImage> Images {set;get;} 
    public UserProfile() 
    { 
    Images=new List<UserImage>(); 
    } 
} 
public class UserImage 
{ 
    public string URL { set;get;} 
    public string Caption { set;get;} 
} 

這個視圖模型與圖像採集

public ActionResult ShowUser(int id) 
{ 
    var user=new UserProfile(); 
    user.Name="SomeName"; 
    //to do : get images from db and set instead of being hard coded 
    user.Images.Add(new UserImage { URL="someImge1.jpg"}); 
    user.Images.Add(new UserImage { URL="someImge2.jpg"}); 
    return View(user); 
} 

而在我們的強類型視圖退回到我的觀點,我們將顯示像,

@model UserProfile 
<table> 
foreach(var img in Model.Images) 
{ 
    <tr> 
    <td><img [email protected]" alt="@img.Caption" /></td> 
    </tr> 
} 
</table> 

我們不在視圖中混合任何代碼。設置圖像url應該在你的Controller中完成。如果圖像位於Content文件夾中,則可以使用Url.Content HTML幫助器方法獲取路徑。