2009-11-18 5 views
11

Это несколько связано с другим вопросом, который я задал, но я думаю, почему бы не спросить его отдельно.Как работает Url.Action Asp.net MVC?

Если бы я поставить что-то вроде следующего в представлении

<td><img src='<%= Url.Action("DisplayImage" , "User" , new { id = item.id}) %>' alt="" /></td> 

должен ли он, чтобы отобразить это?

<td> 
    <img src='/User.mvc/DisplayImage?id=U00915441' alt="" /> 
</td> 

Или значение атрибута SRC-на самом деле быть заменены результатами UserController GetImage действий?

ответ

9

Он построит путь к действию, возвращая URL-адрес, а не результаты выполнения действия.

Результаты будут:

<td> 
    <img src='/User.mvc/DisplayImage?id=U00915441' alt="" /> 
</td> 

Пример кода. предполагает, что ваша модель пользователя имеет изображение, сохраненное в массиве байтов. Если вы используете LINQ, а свойство - Binary, используйте метод ToArray(), чтобы преобразовать его в массив байтов. Обратите внимание на атрибуты, которые потребуют входа пользователя в систему и использования запроса GET.

[Authorize] 
[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult DisplayImage(string id) 
{ 
    var user = ...get user from database... 

    return File(user.Image, "image/jpeg"); 
} 

}

+0

Спасибо. Не могли бы вы узнать, как изображения должны отображаться с помощью этого метода? Каждый пример, который я видел для отображения изображений, использует этот метод, и я не понимаю, как он будет работать (поскольку он не работает для меня). Я новичок в mvc, поэтому это действительно поможет. – zSynopsis

+0

Вам понадобится метод DisplayImage (или GetImage, у вас есть оба пути, но только один может быть правильным), который принимает идентификатор пользователя в качестве параметра. Ему нужно будет вернуть ContentResult с соответствующим типом mime для формата изображения, например image/jpeg, image/gif или image/png. Ваши действия извлекли бы изображение из базы данных в поток и построили ContentResult из этого потока, установив тип mime. – tvanfosson

+0

Спасибо, tvan. Существуют ли какие-либо примеры того, как создавать ContentResult для изображения, хранящегося в массиве байтов? – zSynopsis