Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC3 Display templates

I've created custom Editor templates and Display templates. I've placed each of these types in a folder within my views folder. The folders were named either EditorTemplate or DisplayTemplate, depending upon which type of template was created.

So, now I can use EditorFor to use my custom editor template, or DisplayFor for my custom editor template.

I would like to create a custom template for a LabelFor, but I haven't found an example of this. Would I create a folder named Labeltemplate in my Views folder and add it here?

UPDATE

The reason I was trying to extend the LabelFor was to handle a Property that is of type KeyValuePair. I want to use the Key of this property as the Label, and the value as the Display. I asked a question here about the DisplayFor to handle the Value.

My solution ended up as>

   @Html.DisplayFor(m => m.MyProperty, @Model.MyProperty.Key)

Thanks,

like image 502
Jeff Reddy Avatar asked Dec 07 '11 17:12

Jeff Reddy


2 Answers

LabelFor doesn't use any templates. It is hardcoded in the MVC source code and it spits a <label> no matter what you do.

You will have to write a custom html helper if you want to modify this behavior.

On the other hand if you want to use templates you have to use EditorFor/DisplayFor helpers. So, since a label is for displaying purposes you could use a display template and instead of using Html.LabelFor(x => x.Foo) use Html.DisplayFor(x => x.Foo). As far as the custom template is concerned, either you decorate the Foo property with the [UIHint] attribute or pass it as second argument to the DisplayFor helper.


UPDATE:

According to your comment you are not trying to modify the markup but only the value. That's what the second argument of the LabelFor helper could be used for:

@Html.LabelFor(x => x.Foo, Model.Key)
@Html.EditorFor(x => x.Foo)

This creates a label which is associated with the Foo input (for attribute of the label properly assigned) but the text shown is that of the Key property on your view model.

like image 177
Darin Dimitrov Avatar answered Oct 16 '22 21:10

Darin Dimitrov


There is no support for creating a template for a specific HTML Helper method (LabelFor).

You could:

Markup your model using meta descriptors to change what value gets displayed as part of the label:

 [DisplayName("Custom Label")]
 public string Test {get;set;}

You could create your own custom HTML Helper method for rending out a label:

How can I override the @Html.LabelFor template?

like image 29
Nick Bork Avatar answered Oct 16 '22 23:10

Nick Bork