Я не могу найти метод Html.Image в новой версии MVC RC. Пожалуйста, дайте мне пример, как сделать простой образ в ASP.NET MVC RC-сайтах.
Где находится Html.Image в ASP.NET MVC RC?
Ответ 1
Вам нужно написать свой собственный или использовать метод Url.Content() для установки атрибута source. Или вы можете использовать мое.: -)
public static class HtmlHelperExtensions
{
public static string Image( this HtmlHelper helper,
string url,
string altText,
object htmlAttributes )
{
TagBuilder builder = new TagBuilder( "img" );
builder.Attributes.Add( "src", url );
builder.Attributes.Add( "alt", altText );
builder.MergeAttributes( new RouteValueDictionary( htmlAttributes ) );
return builder.ToString( TagRenderMode.SelfClosing );
}
}
Использование:
<%= Html.Image( Url.Content( "~/Content/images/img.png" ),
"alt text",
new { id = "myImage", border = "0" } )
%>
EDIT: поскольку я написал это, я ушел от его использования. Я оставлю здесь ответ, хотя для потомков. Хотя я думаю, что это или метод из сборника Future, является разумным выбором, я просто использую тег изображения с URL-адресом, предоставленным UrlHelper. Когда я реорганизовал своих помощников в автономную библиотеку, этот не делал разреза. Я буду переоценивать, если он внесет его в (не-фьючерсную) библиотеку MVC.
<img src="<%= Url.Content( "~/content/..." ) %>"
alt="alt text"
class="has-border" />
Ответ 2
Что не так с чистым HTML?
<img src="" alt="" />
Вы можете использовать коллекцию или модель ViewData для заполнения атрибута src:
<img src="<%= ViewData["ImageSource"] %>" alt="" />
<img src="<%= ViewData.Model.ImageSource %>" alt="" />
Edit:
Относительно использования относительных URL-адресов (то есть с использованием символа "~" ) в пути измените приведенный выше код на использование ResolveUrl. Например:
<img src="<%= ResolveUrl(ViewData.Model.ImageSource) %>" alt="" />
Ответ 3
Теперь мы можем вернуть MvcHtmlString.
public static MvcHtmlString Image(this HtmlHelper helper, string url, string altText, object htmlAttributes)
{
TagBuilder builder = new TagBuilder("img");
builder.Attributes.Add("src", url);
builder.Attributes.Add("alt", altText);
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
}
использование в бритве:
@Html.Image( Url.Content( "~/Content/images/img.png" ),
"alt text",
new { id = "myImage", border = "0" } )
Ответ 4
Его в фьючерсах MVC - которые они обновляют с каждой версией.
Фьючерсы RC2 находятся здесь: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24142
Не чувствуйте себя виноватым в использовании чего-то в "фьючерсах". Его никуда не денется - и даже если у вас когда-либо был доступ к источнику.
Вам нужно быть немного осторожным в отношении некоторых вещей в фьючерсах (в случае их исчезновения), но вы можете быть уверены, что помощник изображения не будет никуда.
Ответ 5
public static class HtmlImageHelper
{
public static IHtmlString Image(this HtmlHelper helper,
string src,
string alt)
{
TagBuilder builder = new TagBuilder("img");
builder.Attributes.Add("src", VirtualPathUtility.ToAbsolute(src));
builder.Attributes.Add("alt", alt);
return new HtmlString(builder.ToString(TagRenderMode.SelfClosing));
}
}
@Html.Image(@Model.Image, @Model.alt)
Ответ 6
Если вам нужно ссылаться на изображение в, скажем, в папке ~/Content/images/
, это можно легко сделать с помощью простого HTML:
<img src="/Content/image/mypic.png" alt="a picture available anywhere" />
Трюк - это "/
" в начале атрибута src
, который заставит браузер начать просмотр папок в корне сайта. Поскольку ASP.NET MVC по умолчанию не анализирует маршруты URL-адресов на файлах, которые существуют на сервере, файл будет извлечен, как обычно. Это также будет работать на представлении Index
контроллера Home
, независимо от того, имеете ли вы URL http://www.example.com/
, http://www.example.com/Home
или http://www.example.com/Home/Index