2013-02-22 32 views
0

我使用的是ASP.NET MVC,並遵循ASP.NET網站「Getting-started-with-ef-using-mvc」上的教程指導。我有一個設備類如何將字段顯示爲ASP.NET MVC中的鏈接

public class Equipment 
    { 
     [Key] public int EquipID { get; set; } 
     public string EquipName { get; set; } 
     public string EquipDescription { get; set; } 
     public string EquipSerialNumber { get; set; } 
     public string EquipImage { get; set; } 
     public string EquipManufacturor { get; set; } 
     public string EquipLocation { get; set; } 
     public string EquipCalibrationFreq { get; set; } 
     public virtual ICollection<Calibration> Calibrations { get; set; } 
    } 

每個設備類都有一個或多個校準記錄。以下是我的校準課程。

public class Calibration 
    { 
     [Key] public int RecID { get; set; } 
     public int EquipID { get; set; } 
     public DateTime CalibrationDate { get; set; } 
     public decimal? CalibrationCost { get; set; } 
     public String CalibratedBy { get; set; } 
     public String CalibrationCert { get; set; } 
     public DateTime NextCalibrationDue { get; set; } 
     public String ResponsibleSection { get; set; } 
     public virtual Equipment Equipment { get; set; } 
    } 

現在我的設備索引頁面上顯示了相關的校準記錄(Master-Details)。看看下面: enter image description here 因此,在[校準證書]欄代替文件路徑,我想顯示一個鏈接到文件,它應該在瀏覽器或相關程序中打開文件。

這對孩子的校準記錄

@foreach (var item in Model.Calibrations) 
    { 
     <tr> 
      <td>@Html.DisplayFor(modelItem => item.CalibrationDate)</td> 
      <td>@Html.DisplayFor(modelItem => item.CalibratedBy) </td> 
      <td>@Html.DisplayFor(modelItem => item.CalibrationCost)</td> 
      <td>@Html.DisplayFor(modelItem => item.NextCalibrationDue)</td> 
      <td>@Html.DisplayFor(modelItem => item.CalibrationCert) </td> 

}標記 請幫助我,我怎麼能做出這樣的鏈接文檔和LinkTitle應該顯示documentName。

回答

0

首先,你應該使用Action方法如下

@if (item.Certificate != null) 
    { 
     <a href = @Url.Action("ViewCertificate", new { fileName = item.Certificate }) > <img src = "@Url.Content("~/Images/attachment.png")" alt = "attachment" /> </a> 
    } 

給出代替添加圖像,你可以把一些文字說「查看證書」,以及。

行動方法以支持文件視圖

public ActionResult ViewCertificate(string fileName) 
    { 
     try 
     { 
      var fileStream = System.IO.File.OpenRead(Server.MapPath("~/Certificates/" + fileName)); 
      return File(fileStream , "application/pdf", fileName); 
     } 
     catch 
     { 
      throw new HttpException(404, "Certificate does not found " + fileName); 
     } 


    } 
+0

即使文件存在,它也會顯示此錯誤:證書未找到c:\ users \ shani \ documents \ visual studio 2012 \ Projects \ QA \ QA \ Content \ CaliCert \ 2222013111358-EnrollmentCert。pdf – 2013-02-22 11:13:42

+0

稍作修改它以某種方式工作,而不是自動打開程序,該文件正在下載。謝謝 – 2013-02-22 12:12:27

+0

如果有任何更正請編輯答案,這可能會幫助有需要的人 – 2013-02-22 14:17:32

0

您可以在TD裏面使用:

<a [email protected](Model.CalibrationCertLink)>Certificate</a> 

Yust一個CalibrationCertLink屬性添加到校準類相對鏈接返回到您的文件。

0

您應該創建DisplayTemplates在共享視圖文件夾,然後在那裏您應該爲例如CalibrationCert.cshtml創建模板,有您應該創建您的顯示的代碼:

@model List<CalibrationCert> 
     @foreach (var a in Model) 
      { 
//Create hear the display HTML 
      } 

和@行

public virtual ICollection<Calibration> Calibrations { get; set; } 

你shuld更改爲:

[UIHint("CalibrationCert")] 
public virtual ICollection<Calibration> Calibrations { get; set; } 
0

你可以只添加一個錨標記這樣做的:

<a href="@(Model.CalibrationCertLink)" target="_blank">View Certificate</a> 

當你說target=_blank它在新窗口中打開。

+0

嘗試過但文件未打開:( – 2013-02-22 11:24:31

+0

什麼是html呈現? – 2013-02-22 11:31:24

+0

View Certificate 2013-02-22 11:43:04

相關問題