Ronnie Overby
Ronnie Overby

Reputation: 46470

How to render editor template for model property by property name

The end goal is to render an editor template, for a model property, known only at run time, that will not take it's value from the ViewBag.

Html.Editor will use the ViewBag value if the property names match. I don't want this and I hate this "feature".

I hope that this is possible somehow:

var propName = "MyProperty";
var expression = GiveMeTheExpression();
@Html.EditorFor(expression,"MyEditorTemplate")

If not this then some way of rendering an editor template without the viewbag values being used instead of the model's values. I'm totally fine with doing this, IF I CAN IGNORE THE VIEWBAG VALUES SOMEHOW:

@Html.Editor(propName, other, arguments)

Upvotes: 1

Views: 384

Answers (4)

Ronnie Overby
Ronnie Overby

Reputation: 46470

My solution was to use the @Html.Editor() method with property name as string and to use ViewBag keys that are very unlikely to be found on the model object.

Not ideal, but should work well.

Upvotes: 0

Jonas Stensved
Jonas Stensved

Reputation: 15286

You'll probably have to use Html.Partial with a custom ViewDataDictionary.

object knownAtRuntime = ViewBag.ObjectName; // Adapt to your solution
string templateName = String.Concat("EditorTemplates/", knownAtRuntime.GetType().Name);            

@Html.Partial(templateName, knownAtRuntime, new ViewDataDictionary(knownAtRuntime));

Note: I made this example simple to illustrate the core concept but you can of course extend it to read UIHintAttribute etc if you like.

Note 2: You may also want to copy values from Html.ViewData to the new ViewDataDictionary to keep your modelstate etc.

Upvotes: 1

webdeveloper
webdeveloper

Reputation: 17288

Shyju taking about strongly typed object, if I understand you correctly, you need something like: asp.net mvc 3 and dynamic view generation

Upvotes: 0

Shyju
Shyju

Reputation: 218732

Why not try this ?

@Html.EditorFor(x=>x.SomePropertyName)

Assuming SomePropertyName is the name of a Property of your Model which is strongly typed to your view.

Upvotes: 0

Related Questions