Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the form name for a property

In Razor I know that if you write

@Html.HiddenFor(x => x.PropertyX.PropertyY)

it will generate HTML like:

<input type="hidden" name="PropertyX.PropertyY" value="...">

And (especially) if this was in an Editor Template it might generate this HTML:

<input type="hidden" name="ParentProperty[12].PropertyX.PropertyY" value="...">

How do I get a name for an arbitrary property? I'm assuming there must be some way to do this using MVC infrastructure (perhaps some method or class?)

like image 597
kelloti Avatar asked Feb 23 '23 01:02

kelloti


1 Answers

You could write a custom helper for that:

public static class NameExtensions
{
    public static string NameFor<TModel, TProperty>(
        this HtmlHelper<TModel> html, 
        Expression<Func<TModel, TProperty>> expression
    )
    {
        var partialName = ExpressionHelper.GetExpressionText(expression);
        return html
            .ViewContext
            .ViewData
            .TemplateInfo
            // You could do the same with GetFullHtmlFieldId
            // if you were interested in the id of the element
            .GetFullHtmlFieldName(partialName);
    }
}

and then:

@Html.NameFor(x => x.PropertyX.PropertyY)
like image 196
Darin Dimitrov Avatar answered Mar 04 '23 01:03

Darin Dimitrov