J
jacopo furla
Guest
This is an extremely gutted down example of how the custom widgets are structured: using System; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Text; using System.Web.Mvc; using Newtonsoft.Json.Linq; using Telerik.Sitefinity.Frontend.Forms.Mvc.Models; using Telerik.Sitefinity.Frontend.Mvc.Infrastructure.Controllers; using Telerik.Sitefinity.Frontend.Resources; using Telerik.Sitefinity.Mvc; using Telerik.Sitefinity.Services; namespace SitefinityWebApp.Mvc.Controllers { [ControllerToolboxItem(Name = "MyWidget", Title = "My Widget", SectionName = "My Sections")] public sealed class MyWidgetController : Controller { private IFormModel formModel; [HttpGet] public ActionResult Index() { if (SystemManager.IsDesignMode && this.FormModel.FormId == Guid.Empty) { return this.Content(" Select a form. ", "text/html", Encoding.UTF8); } var packageManager = new PackageManager(); var packageName = packageManager.GetCurrentPackage(); var formId = this.FormModel.FormId.ToString("D", CultureInfo.InvariantCulture); var viewPath = "~/Mvc-Form-View/" + packageName + "/" + formId + ".cshtml"; var viewModel = this.FormModel.GetViewModel(); return this.View(viewPath, viewModel); } [HttpPost] public ActionResult Index(FormCollection formCollection) { return this.Redirect("/"); } [Browsable(false)] [TypeConverter(typeof(ExpandableObjectConverter))] public IFormModel FormModel { get { var type = this.GetType(); this.formModel = ControllerModelFactory.GetModel (type); if (!string.IsNullOrWhiteSpace(this.SelectedItems)) { var id = JArray.Parse(this.SelectedItems).Single().Value ("Id"); if (Guid.TryParseExact(id, "D", out var formId)) { this.formModel.FormId = formId; } } return this.formModel; } set { this.formModel = value; } } public string SelectedItems { get; set; } protected override void HandleUnknownAction(string actionName) { this.ActionInvoker.InvokeAction(this.ControllerContext, nameof(this.Index)); } } } I don't exactly know how the routes are constructed, since we only render the cshtml Sitefinity generates for the forms.
Continue reading...
Continue reading...