Wenn ich habe folgende stark typisierte Ansicht:ASP.NET MVC 2 - Bindung an Abstract Modell
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<XXX.DomainModel.Core.Locations.Location>" %>
Wo Lage eine abstrakte Klasse ist.
Und ich die folgenden Controller verfügen, die ein stark typisierte Modell über eine POST akzeptiert:
[HttpPost]
public ActionResult Index(Location model)
Ich erhalte eine Fehlerlaufzeit unter Angabe „Create kann nicht abstrakte Klasse
Welche Natürlich macht es Sinn - aber ich bin nicht sicher, was die beste Lösung ist hier
Ich habe viele konkrete Typen (um 8), und dies ist eine Ansicht, wo Sie c a nur bearbeiten Eigenschaften der abstrakten Klasse.
Was ich habe versucht zu tun ist Überlastungen für die verschiedenen Betontypen erstellen, und führen Sie meine Logik in einer gemeinsamen Methode.
[HttpPost]
public ActionResult Index(City model)
{
UpdateLocationModel(model);
return View(model);
}
[HttpPost]
public ActionResult Index(State model)
{
UpdateLocationModel(model);
return View(model);
}
etc etc
Und dann:
[NonAction]
private void UpdateLocationModel (Location model)
{
// ..snip - update model
}
Aber das funktioniert nicht, entweder, MVC die Aktionsmethoden nicht eindeutig sind (auch sinnvoll) beklagt.
Was machen wir? Können wir uns einfach nicht an ein abstraktes Modell binden?
Gute Frage. Interessiert, um die Antworten zu sehen! –
Ich bin neugierig, wenn Sie jemals einen besseren Weg gefunden haben, damit umzugehen? –
@Mystere Man - nein. Ich musste es nicht noch einmal machen. Wenn ich es täte, würde ich tun, was die angenommene Antwort vorschlägt. – RPM1984