我發現了一個解決方案,它涉及到創建一個新的html助手。 OP的說法是正確的,即在操作方法和查看頁面中使用相同的類作爲參數有時是不恰當的。有時我們想要將更多信息傳遞給ViewPage,而不是用戶在表單帖子中給予我們的信息。
我想出的解決方案是使用一個的HtmlHelper擴展方法,該方法我稱爲HtmlHelperFor(T OBJ),我使用如下:
<% var productForm = Html.HtmlHelperFor(Model.Product); %>
,然後我用它如下:
<%= 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; }
}
上述通話將允許代替類,你有一個Product
對象爲接受POST方法的參數的一部分,其中包含的項目,你通常會傳遞給你的觀點。
XForms中的一些例子適用於他的案例。 – 2009-08-24 09:28:06
你可以給你一個**真實**的樣本,你想做什麼?我真的不明白你想要達到什麼(輸入和輸出模型?)。 – 2009-08-24 09:31:55
Dmitriy Nagirnyak: 這個想法是,你使用一個模型來填充視圖。您可能不使用相同的模型來保存視圖中的數據。他們有不同的擔憂。 – BjartN 2009-08-24 10:23:37