Как передать модель сложного представления в действие контроллера через вызов 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