新しいhtmlヘルパーを作成するという解決策が見つかりました。 OPは、アクションメソッドとビューページのパラメータとして同じクラスを使用することは、時には不適切であるという点で正しいです。時には、ユーザーがフォームの投稿で私たちに返すものよりも多くの情報をViewPageに渡したい場合があります。
<% var productForm = Html.HtmlHelperFor(Model.Product); %>
を、その後、私は以下のようにそれを使用する:
私が思いついた解決策は、私は以下のように使用HtmlHelperFor(TのOBJ)と呼ばHtmlHelperの拡張メソッドを使用することである
<%= productForm.TextBoxFor(x => x.Name) %>
拡張方法は以下である:
public static HtmlHelper<T> HtmlHelperFor<T>(this HtmlHelper html, T model)
{
var newViewData = new ViewDataDictionary(html.ViewDataContainer.ViewData) { Model = model };
ViewContext newViewContext = new ViewContext(html.ViewContext.Controller.ControllerContext, html.ViewContext.View, newViewData, html.ViewContext.TempData, html.ViewContext.Writer);
var viewDataContainer = new ViewDataContainer(newViewContext.ViewData);
return new HtmlHelper<T>(newViewContext, viewDataContainer, html.RouteCollection);
}
ViewDataContainerはIVIの実装でありますSysetm.Web.Mvcで見つかったewDataContainerインタフェース:
public class ViewDataContainer : System.Web.Mvc.IViewDataContainer
{
public ViewDataContainer(System.Web.Mvc.ViewDataDictionary viewData)
{
ViewData = viewData;
}
public System.Web.Mvc.ViewDataDictionary ViewData { get; set; }
}
上記の呼び出しは、あなたがPOSTを受け取るメソッドのパラメータの一部として、代わりにあなたのプロジェクトが含まれているクラスのProduct
オブジェクトを持つことができるようになります通常はあなたの見解に合格します。
XFormsのいくつかの例は、彼のケースに当てはまります。 –
あなたは何をしたいのですか**本当の**サンプルを与えることができますか?私はあなたが達成しようとしていることを本当に理解していません(入力と出力のモデル?)。 –
Dmitriy Nagirnyak: 考え方は、1つのモデルを使用してビューを生成することです。同じモデルを使用して、ビューからデータを保存することはできません。彼らは異なった関心事です。 – BjartN