Я хотел бы преобразовать свой
<input type="file" id="image" name="image">
в нечто вроде
@Html.UploadFor(model => model.Image)
Что-то более дружественное к MVC ...
Я знаю, что мне нужно создатьпомощник для этого с возможностями Linq Expression.
Как это можно сделать?
РЕДАКТИРОВАТЬ
Вот одно из решений:
public static MvcHtmlString UploadFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
var builder = new TagBuilder("input");
builder.MergeAttribute("type", "file");
builder.MergeAttribute("id", HtmlExtensions.IdFor(helper, expression));
builder.MergeAttribute("name", HtmlExtensions.NameFor(helper, expression));
return new MvcHtmlString(builder.ToString(TagRenderMode.SelfClosing));
}
public static class HtmlExtensions
{
public static string NameFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
return htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
}
public static string IdFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
return HtmlHelper.GenerateIdFromName(NameFor(htmlHelper, expression));
}
}