herança do modelo asp.net mvc para "formulários simples"

Como você implementaria isso?

Eu tenho o seguinte modelo:

class Something
{
     public string Label { get; set; }
     public DateTime Date1 { get; set; }
}

class SomethingStage2 : Something
{
     public DateTime Date2 { get; set; }
}

class SomethingStage3 : SomethingStage2
{
     public DateTime Date3 { get; set; }
}

E os seguintes modelos de editor:

EditorTemplates \ Something

<%@ Control Language="C#" Inherits="ViewUserControl<Something>" %>
<%= Html.Hidden( "TypeName", Model.GetType() ) %>
<%= Html.EditorFor( x => x.Label ) %>
<%= Html.EditorFor( x => x.Date1 ) %>

EditorTemplates \ SomethingStage2

<%@ Control Language="C#" Inherits="ViewUserControl<SomethingStage2>" %>
<% Html.RenderPartial("EditorTemplates/Something.ascx" %>
<%= Html.EditorFor( x => x.Date2 ) %>

EditorTemplates \ SomethingStage3

<%@ Control Language="C#" Inherits="ViewUserControl<SomethingStage3>" %>
<% Html.RenderPartial("EditorTemplates/SomethingStage2.ascx" %>
<%= Html.EditorFor( x => x.Date3 ) %>

Para atualizar, tenho o seguinte método de controlador:

public ActionResult Update( Something model );

Tecnicamente, funciona muito bem.

Atualização: para lidar com as diferentes subclasses do modelo, peguei emprestada essa ideia:http://www.codinginstinct.com/2010/03/aspnet-mvc-and-convention-based-forms.html

public class CustomModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var typeName = bindingContext.ValueProvider.GetValue("TypeName");
        var type = Type.GetType(reportFormTypeName.AttemptedValue);
        var model = bindingContext.ModelMetadata.Model;
        bindingContext.ModelMetadata = new ModelMetadata(ModelMetadataProviders.Current, 
            bindingContext.ModelMetadata.ContainerType,
            () => model, type , bindingContext.ModelMetadata.PropertyName);

        return base.BindModel(controllerContext, bindingContext);
    }
}

Atualização: Se a Data3 for entre o Rótulo e a Data1, é claro que essa abordagem não funcionará. É por isso que é para formulários simples. E economiza muito tempo,

Essa abordagem é correta, em casos simples, em que os formulários de edição são diretos? Só estou me perguntando se é "certo" fazê-lo dessa maneira. Caso contrário, como você implementaria isso?

questionAnswers(1)

yourAnswerToTheQuestion