既定のモデル バインディングは、フォーム パラメーターを名前で受け取り、引数リストで指定された型のプロパティと一致させます。たとえば、モデルに「価格」と「名前」のプロパティがある場合、フォームには「価格」と「名前」というID/名前の入力を含める必要があります(大文字と小文字を区別しない一致を行うと思われます)。バインダーは、リフレクションを使用して、これらのキーに関連付けられたフォーム値を適切な型に変換し、パラメーターによって指定された型の新しく作成されたオブジェクトのプロパティに割り当てます (これもリフレクションによって導出されます)。
このソースはhttp://www.codeplex.com/aspnetで実際に確認 (およびダウンロード) できますが、そこから MVC ソースにドリルダウンする必要があります。DefaultModelBinder ソースへのリンクを提供したいと思いますが、それらが構築される方法は、リビジョンが導入されるとリンクが変更されると思います。
したがって、質問に答えるには、再作成するオブジェクトのプロパティに対応するパラメーター (非表示の可能性があります) がフォームに必要です。フォーム (ビュー内) をコントローラーに POST すると、バインダーはフォーム パラメーターを使用して、指定された型のオブジェクトを再構成する必要があります。フォーム パラメーターの値をオブジェクト プロパティに変換する必要がある場合は、おそらく独自のカスタム モデル バインダーを実装する必要があります。
[編集] 2 番目の投稿への返信:
カスタマイズされたオブジェクトを使用するアクションへのリンクが必要だとしましょう。特定のキーを使用して、カスタマイズされたオブジェクトを TempData (または、複数のポストバックを通じて持続させる必要がある場合はセッション) に格納できます。次に、アクション リンクを作成し、オブジェクトのキーを値として匿名クラスの ActionLink に提供します。これにより、キーが Request パラメータとして返されます。このアクションでは、このパラメーターのキーを使用して、TempData からオブジェクトを取得できます。
<%= Html.ActionLink( ViewData["CustomObject1",
"Select",
new { TempDataKey = ViewData["CustomObject1_Key"] }
) %>
public ActionResult Select()
{
Entity custObj = null;
string objKey = Request.Params["TempDataKey"];
if (!string.IsNullOrEmpty(objKey))
{
custObj = (Entity)TempData[objKey];
}
... continue processing
}