He encontrado una solución que implica crear un nuevo helper html. El OP es correcto al decir que a veces es inapropiado usar la misma clase como parámetro para el método de acción y para la página de visualización. A veces queremos pasar MÁS información a la página de visualización que lo que el usuario nos devuelve en la publicación del formulario.
La solución me ocurrió es utilizar un método de extensión HtmlHelper, que llamé HtmlHelperFor (T obj) que utilizo como a continuación:
<% var productForm = Html.HtmlHelperFor(Model.Product); %>
y luego lo uso como a continuación:
<%= productForm.TextBoxFor(x => x.Name) %>
el método de extensión es a continuación:
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);
}
el ViewDataContainer es una implementación de la IVi ewDataContainer interfaz que se encuentra en Sysetm.Web.Mvc:
public class ViewDataContainer : System.Web.Mvc.IViewDataContainer
{
public ViewDataContainer(System.Web.Mvc.ViewDataDictionary viewData)
{
ViewData = viewData;
}
public System.Web.Mvc.ViewDataDictionary ViewData { get; set; }
}
las llamadas anteriores le permitirá tener un objeto Product
como parte de los parámetros del método que acepta el cargo, en lugar de una clase que contiene proyecto que se normalmente pasaría a su vista.
¿Qué tal algunos ejemplos en XForms que se aplica a su caso. –
¿Puedes dar una muestra ** real ** de lo que quieres hacer? Realmente no entiendo lo que estás tratando de lograr (modelo de entrada y salida?). –
Dmitriy Nagirnyak: La idea es que use un modelo para poblar la vista. Es posible que no use el mismo modelo para guardar datos de la vista. Son para diferentes preocupaciones. – BjartN