2011-01-28 15 views
0

モデルオブジェクトと共にEditorForに引数として代理人またはコマンドオブジェクトを送信したいと思います。私はそれを送るためにビューデータを使うことができましたが、私はそれが大好きですは強く型付けされました。これを行うには合理的な方法はありますか?複合モデル型の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") %> 

を他の可能性は、追加のViewDataとしてそれを渡すことですが、それは強く型付けされません。

<%= 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式の別の型の新しいインスタンス知らせてくれてありがとうございます! –

関連する問題