2011-01-28 66 views
0

我想将一个委托或命令对象作为参数发送给EditorFor以及模型对象。我可以使用viewdata发送它,但我非常喜欢它强类型。有没有合理的方法来做到这一点?MVC EditorFor用复合模型类型?

这大概想什么,我能在编辑模板做:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Pair<MyModelType, TheDelegate>>" %> 

但我怎么能我的委托添加到这样的表达式呢?

<%= Html.EditorFor(m => m.MyModelTypeField, "ThatEditor") %> 

回答

1

除非您修改视图模型并让控制器传递必要的信息,否则不能以强类型的方式进行此操作。所以

public class MyModelTypeWithDelegate 
{ 
    public MyModelType MyModelType { get; set; } 
    public TheDelegate MyModelTypeDelegate { get; set; } 
} 

public class MyViewModel 
{ 
    public MyModelTypeWithDelegate MyModelTypeWithDelegate { get; set; } 
} 

然后:

<%= Html.EditorFor(m => m.MyModelTypeWithDelegate, "ThatEditor") %> 

另一种可能是把它作为额外的可视数据,但它不会被强类型:

<%= Html.EditorFor(m => m.MyModelTypeField, "ThatEditor", new { TheDelegate = someDelegate }) %> 

,然后你的编辑模板中:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyModelType>" %> 
<% 
    var del = (TheDelegate)ViewData["TheDelegate"]; 
%> 
+0

我一直希望能够创建m => m.MyModelTypeField表达式中另一个类型的新实例。谢谢你让我知道! – 2011-01-28 11:14:15