2016-10-13 5 views
0

Я пытаюсь отобразить изображение из базы данных. Но, я получаю следующую ошибку.Отображение изображения в MVC

Наилучшее перегруженное соответствие метода для System.Web.Mvc.UrlHelper.Content (string) содержит некоторые недопустимые аргументы.

Вот мой код:

<table> 
    <tr> 
     <td> 
      Category ID 
     </td> 

     <td> 
      Category Name 
     </td> 

     <td> 
      Category Image 
     </td> 
    </tr> 
    @foreach (var item in Model) 
    { 
    <tr> 
     <td>@item.CategoryID</td> 
     <td>@item.CategoryName</td> 
     <td><img src="@Url.Content(item.CategoryImage)" /></td> 

    </tr> 
    } 
</table> 
+0

какое значение вы получаете: 'item.CategoryImage'? –

+0

какой тип данных «item.CategoryImage»? Это должно быть строка на пути к изображению, и я думаю, что вы передаете ей байты, и в этом случае '@ Url.Content' не является правильным выбором. – Crowcoder

+0

Я просто получаю эту ошибку. Наилучшее перегруженное соответствие метода для System.Web.Mvc.UrlHelper.Content (string) содержит несколько недопустимых аргументов. –

ответ

1

Это код, который я использую:

private static string ImageByteToBase64ImageTag(byte[] array) 
    { 
     string base64 = Convert.ToBase64String(array); 
     return "<img class=\"img-responsive center-block\" src=\"data:image/png;base64," + base64 + " \" />"; 
    } 

В этом случае, было бы гораздо легче работать с изображением как base64 изображение , Мой код довольно прямой, но все, что вам нужно сделать, это передать массив изображения и получить строку base64. Вы даже можете вернуть изображение через JSON, если вы отформатируете его правильно. Вы можете вернуть только следующую часть в ViewBag или Model:

ViewBag.ImageData = "data:image/png;base64," + base64String 

И в вашем HTML

<img src="@Html.Raw(ViewBag.ImageData)" /> 

Или в вашей модели, просто сделать строковое свойство для изображения.

+0

Как обсуждалось в комментариях по вопросу: это _an_ подход, но, возможно, не самый жизнеспособный. Это зависит от многих факторов, среди прочего, от количества и размера изображений. Если мы говорим о 1 МБ изображений и 1 КБ HTML, тогда ваша страница будет внезапно превышать 1,3 МБ HTML (из-за встроенных изображений с кодировкой base-64), и браузер не начнет рендеринг прежде всего Загружается HTML. – CodeCaster

-1
public ActionResult GetImage() 
{ 
    var imageFile = System.Web.HttpContext.Current.Server.MapPath("ImagePathHere"); 
    var srcImage = Image.FromFile(imageFile); 
    using (var stream = new MemoryStream()) 
    { 
     srcImage.Save(stream, ImageFormat.Png); 
     return File(stream.ToArray(), "image/png"); 
    } 
} 
+1

Stack Overflow не является «делить ваш любимый фрагмент». Этот метод действия предполагает существование файла на диске, в то время как в этом вопросе он находится в столбце базы данных. Ответ на код также не является хорошим ответом, попробуйте добавить некоторое объяснение того, что делает код в следующий раз. – CodeCaster

+0

Если вы проверите код перед разговором, вы увидите, что этот метод File получает байт [] и возвращает FileContentResult, и вы можете понять, что я имею в виду. –

+0

Если вы объясните, что делает код перед тем, как сбросить его, мне не придется читать его по очереди, чтобы попытаться понять, что вы пытаетесь сказать. Это говорит о том, что я придерживаюсь своего предыдущего комментария: код, который вы опубликовали, ожидает существования файла, что здесь не так. – CodeCaster

Смежные вопросы