Вызов помощника с возможностями выражения linq - PullRequest
1 голос
/ 18 ноября 2011

Я хотел бы преобразовать свой

<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));
    }
}

1 Ответ

2 голосов
/ 18 ноября 2011

См. Этот справочник / учебник по созданию пользовательских HTML-помощников: http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs

public static MvcHtmlString UploadFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) 
{ 
    // generate your HTML 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...