Как передать модель сложного представления в действие контроллера через вызов ajax с JSON в .Net MVC4?

Поэтому я как можно больше исследовал Stack Overflow и не смог найти ответ на этот конкретный вопрос. Извиняюсь, если об этом уже спрашивали.

Я нашел ответы на:

как передать объект / класс в действиекак передать объект через строку запроса в действиекак передать объект через JSON к действиюкак передать полиморфный объект в действие и обработать его с помощью пользовательского механизма связывания моделей

Предположим, у вас есть следующий код, как вы можете объединить вышеуказанные методы в одно решение. Поэтому я хотел бы выполнить действие на контроллере (используя вызов jquery ajax) с помощью объекта json, передать в действие модель представления и попросить его определить правильный полиморфный тип (в данном случае, тип Notification). ) - возможно, с помощью пользовательского связующего модели.

Примечание. Это пример кода, используемого для иллюстрации проблемы.

Модели:

public class Notification
{
    public int ID { get; set; }
    public string ApplicationID { get; set; }
    public string Description { get; set; }
    public System.DateTime DateStamp { get; set; }
}

public class WarningNotification : Notification
{
    public string WarningText { get; set; }
}

public class AlertNotification : Notification
{
    public string AlertText { get; set; }
    public int AlertId { get; set; }
}

Посмотреть модель:

public class SaveNotificationViewModel
{
    public Notification Notification { get; set; }
    public string Hash { get; set; }
    public List<int> Users { get; set; }
}

Действие контроллера:

public ActionResult Save(SaveNotificationViewModel model)
{
    //code inside method irrelevant...
}

Модель Binder:

public class NoticationModelBinder : DefaultModelBinder
{
    protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
    {
        var typeValue = bindingContext.ValueProvider.GetValue("ModelType");
        var type = Type.GetType((string)typeValue.ConvertTo(typeof(string)), true);

        if (!typeof(Notification).IsAssignableFrom(type))
        {
            throw new InvalidCastException("Bad type");
        }

        var model = Activator.CreateInstance(type);
        bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type);
        return model;
    }
}

Источник исходного вопроса, который отправил меня по этой кроличьей норе, и код в основном заимствован из:Методология передачи сочетания: list <>, object и примитивов в действие контроллера ASP MVC

Ответы на вопрос(2)

Ваш ответ на вопрос