ASP.NET MVC Html.Editor如何将模型传递到编辑器模板中

3
我有一个名为"Address.cshtml"的编辑器模板,它定义了一个模型:
@model Acme.Models.Address

在一个视图中,我想调用编辑器模板并传递相同类型的本地变量,并定义它将使用的变量名称。我尝试了许多方法,包括:

@Html.Editor("address", "Address", new { Model = address })

如何传递模型?

注意,我不能使用@Html.EditorFor(),因为视图使用不同的模型。


你仍然可以使用EditorFor,就我所见。 - Ehsan Sajjad
@EhsanSajjad 怎么做?当您在Linq表达式中引用模型时,它会绑定到视图的模型,如何覆盖它以使用不同的对象作为模型? - Josh
1
如果在视图中address是一个变量,你可以像这样使用EditorFor(x=> address),但我不确定,从技术上讲它应该可以工作。 - Ehsan Sajjad
不,它所做的是获取您变量的类型,并且如果匹配模板,则只显示视图模型属性。当您将鼠标悬停在x上时,您可以看到这一点,因为它显示了视图模型的名称。 - Josh
我真的不明白你想做什么。每当你试图违背框架的本意时,你应该认真考虑为什么要这样做...很有可能,你可能误解了自己想要做的事情。 - Erik Funkenbusch
2个回答

3

EditorFor的唯一目的是与视图的模型配合使用。如果您需要使用完全不同于视图模型或无法通过视图模型访问的类实例,请使用Html.Partial。它们在功能上是相同的。如果您担心使用特定的编辑器模板,您可以始终将视图的完整路径传递给Html.Partial


最终使用了Html.Partial。我原本认为EditorFor不能用于此,但我想可能有一种方法可以使用Html.Editor()来传递作为编辑器模板模型的对象。 - Josh
@Josh,@Html.EditorFor(m => m.Address)会将对象传递给EditorTemplate(假设属性Address的类型为Acme.Models.Address)。 - user3559349

0
在一个视图中(可以是头部或其他位置,但在调用Html.Editor之前),您可以使用与Html.Editor的表达式相等的键将模型添加到ViewData中,并在调用的编辑器中使用它作为模型。例如:
@{
    var address = new Acme.Models.Address();
    ViewData["address] = address;
}

@Html.Editor("address", "Address")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接