Принудительное сохранение свойства контроллера виджета Sitefinity MVC - PullRequest
0 голосов
/ 07 ноября 2018

Я делаю виджет Sitefinity с использованием контроллера MVC. Виджет показывает и все такое, проблем нет. Я хотел бы сохранить данные для виджета в форме JSON в скрытом свойстве. Я знаю, как сделать свойство скрытым через атрибут, но я хочу знать, как отправить данные POST в мой контроллер и установить свойство на контроллере, которое будет сохранено в таблице sf_control_properties. Обычно свойства контроллера сохраняются здесь только при редактировании свойств виджета и нажатии «Сохранить» в интерфейсе администратора. Мой контроль будет иметь два режима (просмотр пользователя и просмотр администратора). Я не делаю собственного дизайнера через всплывающее окно редактирования. Я показываю дизайн в режиме дизайна страницы на самом виджете. У меня есть кнопка сохранения, которая будет делать POST для контроллера на серверной части. Я хочу, чтобы он установил свойство, а затем сохранил его в таблице sf_control_properties, как это сделал бы обычный edit-> modal-> Save. Я знаю, что могу подключиться напрямую к SQL и записать значение, но есть ли лучший способ заставить свойство виджета сохранять в контроллере MVC, чем грубая сила SQL? Вот пример моей настройки контроллера.

[ControllerToolboxItem(Name = "MyWidget", Title = "My Widget", SectionName = "Dashboard")]
public class MyWidgetController : Controller
{
    public string Title { get; set; }

    public string CssClass { get; set; }

    public string CustomData {get;set;} //JSON string data

    public ActionResult Index()
    {
       var viewModel = this.CustomData.FromJson<MyWidgetViewModel>();
       return View(ViewModel);
    }

    [HttpPost]
    public ActionResult Save(MyWidgetModel model)
    {
        this.CustomData = model.ToJson();
    }
}

Таким образом, в основном, когда я делаю сообщение ajax на этот контроллер, я хочу установить this.CustomData = postModel.ToJson () и сохранить его в таблице sf_control_properties.

Я делаю это, чтобы не создавать пользовательский динамический модуль со своей собственной таблицей и т. Д. Когда элемент управления загружается в обычном пользовательском представлении, я преобразую свойство this.CustomData в класс C # и использую его в своем представлении бритвы ....

...