If i have the following strongly-typed view:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<XXX.DomainModel.Core.Locations.Location>" %>
Where Location is an abstract class.
And i have the following Controller, which accepts a strongly-typed Model via a POST:
[HttpPost]
public ActionResult Index(Location model)
I get a runtime error stating "Cannot Create Abstract Class
Which of course makes sense. However - i'm not sure what the best solution is here.
I have many concrete types (around 8), and this is a view where you can only edit properties of the abstract class.
What i've tried to do is create overloads for all the different concrete types, and perform my logic in a common method.
[HttpPost]
public ActionResult Index(City model)
{
UpdateLocationModel(model);
return View(model);
}
[HttpPost]
public ActionResult Index(State model)
{
UpdateLocationModel(model);
return View(model);
}
etc etc
And then:
[NonAction]
private void UpdateLocationModel (Location model)
{
// ..snip - update model
}
But this doesn't work either, MVC complains the action methods are ambiguous (also makes sense).
What do we do? Can we simply not bind to an abstract model?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…