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

时间:2014-09-02 20:11:48

标签: .net asp.net-mvc razor viewdata

在针对@model System.Tuple<Person, List<Survey>>

的视图强类型视图中

我在for-each循环中使用:

  @Html.EditorFor(x => survey.Questions)

在`调查中提出问题。它完美无缺。

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

@Html.EditorFor(x => survey.Questions, new { htmlAttributes = new { PersonId = 1000 } })

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

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

  @using WebApplication2.Models
    @model   Question
    <div>
        @ViewData["PersonId"]
    </div>

但没有出现。

如何正确地将PersonId = 1000传递给此EditorTemplate。

3 个答案:

答案 0 :(得分:15)

经过一番搜索后发现了以下堆栈溢出的答案,用于迭代嵌套属性。我无法将演员阵容变为&#34;动态&#34;工作,但使用反射正确检索嵌套的匿名对象。 https://stackoverflow.com/a/13981462/1046155

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

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

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

<div>
     @ViewData["PersonId"]
     @ViewData["PersonName"]
     @ViewData["PersonAge"]
     etc...
</div>

答案 1 :(得分:2)

尝试:

@ViewData["htmlAttributes"]["PersonId"]

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

答案 2 :(得分:2)

似乎您尚未设置ViewData。您需要在控制器中设置返回此视图的ViewData。只需ViewData["PersonId"] = 10