Asp.net-Mvc-3

如何使用 Razor 顯示動態圖像名稱

  • August 11, 2014

我對 MVC 很陌生,最近使用 Razor 視圖引擎啟動了一個 Asp.Net MVC3 項目。

目前,我無法使用 Razor 將圖像名稱輸出到 html img 標籤中。

假設我的模型中有一個 Car 類,帶有一個名為 ModelName 的字元串屬性。我還有一個包含汽車模型圖像的文件夾,它們以汽車模型命名,這樣我就可以按照慣例顯示特定模型的圖像,只需使用名稱即可。

從我的控制器中,我將一組 Cars 傳遞給我的視圖,並執行以下操作以顯示汽車模型圖像列表:

@foreach (var item in Model) {
<img src='@item.ModelName.png' />
}

但是,如果我嘗試執行它,我會收到錯誤消息:

編譯器錯誤消息:CS1061:“string”不包含“png”的定義,並且找不到接受“string”類型的第一個參數的擴展方法“png”(您是否缺少 using 指令或程序集引用?)

我也試過

   @foreach (var item in Model) {
    <img src='@{item.ModelName}.png' />
   }

但這會導致:

編譯器錯誤消息:CS1528:預期;或 =(不能在 >declaration 中指定建構子參數)源錯誤:

第 84 行:#line default 第 85 行:#line hidden 第 86 行:WriteLiteral(".png' “>\r\n”); 第 88 行:

我可以通過以下方式解決它:

@foreach (var item in Model) {
    string imageName = string.Format("{0}.png", item.ModelName);
    <img src='@imageName' />
   }

但這感覺很笨拙,肯定有更好的方法嗎?

你也可以這樣做:

@foreach (var item in Model) 
{
   <img src="@(item.ModelName).png" />
}

或者做一個助手:

public static MVCHtmlString Image<T>(this HtmlHelper helper, string name)
{
   TagBuilder img=new TagBuilder("img");
   img.Attributes.Add("src", name+".png");
   return new MvcHtmlString(img.ToString());
}

並像這樣使用它:

@foreach (var item in Model) 
{
   @Html.Image(item.ModelName)
}
@foreach (var item in Model._imageList)
{
   <tr>
       <td>
           @Html.DisplayFor(modelItem => item.FriendlyName)
       </td>
       <td>
           @Html.DisplayFor(modelItem => item.CreateDate)
       </td>
       <td>
            <img src="@Url.Content(item.ImagePath)" alt="Image" />
       </td>
       <td>
           @Html.ActionLink("Edit", "UploadImageEdit", new { id = item.ImageID }) |
           @Html.ActionLink("Details", "UploadImageDetails", new { id = item.ImageID }) |
           @Html.ActionLink("Delete", "UploadImageDelete", new { id = item.ImageID })
       </td>
   </tr>
}

這將顯示保存在文件系統上的圖像,但文件路徑在使用 foreach 循環時保存在數據庫中。

引用自:https://stackoverflow.com/questions/5974262