Comment implémenteriez-vous cela?asp.net héritage du modèle mvc pour "formes simples"
je le modèle suivant:
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; }
}
Et les modèles de l'éditeur suivants:
EditorTemplates \ Quelque chose
<%@ 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) %>
Pour la mise à jour, je la méthode de commande suivante:
public ActionResult Update(Something model);
Techniquement, il fonctionne très bien.
Mise à jour: pour traiter les différentes sous-classes du modèle, je l'ai emprunté cette idée: 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);
}
}
Mise à jour: Si DATE3 doit aller entre l'étiquette et Date1, cette approche ne fonctionnera pas, cours. C'est pourquoi c'est pour des formes simples. Et c'est un grand gain de temps,
Cette approche est-elle correcte, pour les cas simples, où les formulaires d'édition sont simples?
Je me demande simplement si c'est "juste" de le faire de cette façon. Si non, comment le mettriez-vous en œuvre?
Que voulez-vous dire par « correct? » –
Vous avez raison, ne veut pas dire grand-chose. maintenant dans la communauté wiki – mathieu