如何通过@ Html.EditorFor将ViewData的值传递给编辑器模板

Yod*_*oda 7 .net asp.net-mvc viewdata razor

在视图中强类型视图 @model System.Tuple<Person, List<Survey>>

我在for-each循环中使用:

  @Html.EditorFor(x => survey.Questions)
Run Code Online (Sandbox Code Playgroud)

在"调查"中提出问题.它完美无瑕.

现在我还想将其他数据传递给自定义编辑器模板.我做了:

@Html.EditorFor(x => survey.Questions, new { htmlAttributes = new { PersonId = 1000 } })
Run Code Online (Sandbox Code Playgroud)

然后在Edtior模板中我想引用它PersonId并显示它.

这是我制作的编辑模板(问题用途的快捷方式):

  @using WebApplication2.Models
    @model   Question
    <div>
        @ViewData["PersonId"]
    </div>
Run Code Online (Sandbox Code Playgroud)

但没有任何表现.

如何正确传递PersonId = 1000给此EditorTemplate.

小智 16

经过一番搜索后发现了以下堆栈溢出的答案,用于迭代嵌套属性.我无法使转换成"动态"工作,但使用反射正确检索嵌套的匿名对象. /sf/answers/978702371/

但是,如果您只想传递HTML属性,则可以按顺序指定它们:

@Html.EditorFor(x => survey.Questions, new { PersonId = 1000, PersonName = "John", PersonAge=10, etc... })
Run Code Online (Sandbox Code Playgroud)

并通过以下方式在编辑器中访问它们

<div>
     @ViewData["PersonId"]
     @ViewData["PersonName"]
     @ViewData["PersonAge"]
     etc...
</div>
Run Code Online (Sandbox Code Playgroud)


Chr*_*att 2

尝试:

@ViewData["htmlAttributes"]["PersonId"]
Run Code Online (Sandbox Code Playgroud)

外部匿名对象是填充的ViewData。不过,如果您使用上述内容,则需要注意ViewData["htmlAttributes"]在尝试引用“PersonId”之前检查它是否确实存在。