简体   繁体   中英

How to pass value by ViewData to Editor Template by @Html.EditorFor

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM