In the view strongly typed view against @model System.Tuple<Person, List<Survey>>
I use inside a for-each loop:
@Html.EditorFor(x => survey.Questions)
to render questions in a `Survey. It works flawless.
Now I would also like to pass additional data to the custom Editor Template. I did:
@Html.EditorFor(x => survey.Questions, new { htmlAttributes = new { PersonId = 1000 } })
and then in the Edtior Template I want to refer to this PersonId
and display it.
This is Editor Template I made(shortcut for question purposes):
@using WebApplication2.Models
@model Question
<div>
@ViewData["PersonId"]
</div>
but nothing shows up.
How to properly pass PersonId = 1000
to this EditorTemplate.
After some searching around found the following stack-overflow answer for iterating through nested properties. I was unable to get the cast to "dynamic" working, but using reflection correctly retrieved the nested anonymous object. https://stackoverflow.com/a/13981462/1046155
However, if you're determined to use HTML attributes only, you can specify them in a dynamic object:
@Html.EditorFor(x => survey.Questions, new { PersonId = 1000, PersonName = "John", PersonAge=10, etc... })
And access them within the editor using @ViewData:
<div>
@ViewData["PersonId"]
@ViewData["PersonName"]
@ViewData["PersonAge"]
etc...
</div>
Try:
@ViewData["htmlAttributes"]["PersonId"]
The outer anonymous object is what populates ViewData
. Though, if you use the above, you need to take care that you check that ViewData["htmlAttributes"]
actually exists before trying to reference "PersonId" off of it.
Seems that you haven't set the ViewData
. You need to set the ViewData
in the controller that returns this View. Just ViewData["PersonId"] = 10
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With