I'm having trouble setting up routing on a user controller in Orchard.
I created a View:
@model dynamic @{ Script.Require("jQuery"); } @using (Html.BeginForm("Send", "Email", FormMethod.Post, new { id = "contactUsForm" })) { <fieldset> <legend>Contact Us</legend> <div class="editor-label">Name:</div> <div class="editor-field"> @Html.TextBox("Name", "", new {style = "width: 200px"}) </div> <div class="editor-label">Email Address:</div> <div class="editor-field"> @Html.TextBox("Email", "", new {style = "width: 200px"}) </div> <div class="editor-label">Telephone Number:</div> <div class="editor-field"> @Html.TextBox("Telephone", "", new {style = "width: 200px"}) </div> <div class="editor-label">Message:</div> <div class="editor-field"> @Html.TextArea("Message", "", new {style = "width: 200px"}) </div> <br/> <input id="ContactUsSend" type="button" value="Submit" /> </fieldset> } @using (Script.Foot()) { <script> $(function() { $('#ContactUsSend').click(function () { alert('@Url.Action("Send", "Email")'); var formData = $("#contactUsForm").serializeArray(); $.ajax({ type: "POST", url: '@Url.Action("Send", "Email")', data: formData, dataType: "json", success: function (data) { alert(data); } }); }); }); </script> }
With controller:
public class EmailController : Controller { [HttpPost] public ActionResult Send() { var orchardServices = DependencyResolver.Current.GetService<IOrchardServices>(); var messageHandler = DependencyResolver.Current.GetService<IMessageManager>(); var svc = new ContactUsService(orchardServices, messageHandler); svc.DoSomething(); return new EmptyResult(); } }
And configure the route:
public class Routes : IRouteProvider { public void GetRoutes(ICollection<RouteDescriptor> routes) { foreach (var routeDescriptor in GetRoutes()) { routes.Add(routeDescriptor); } } public IEnumerable<RouteDescriptor> GetRoutes() { return new[] { new RouteDescriptor { Priority = 15, Route = new Route( "ContactUsWidget", new RouteValueDictionary { {"area", "ContactUsWidget"}, {"controller", "Email"}, {"action", "Send"} }, new RouteValueDictionary(), new RouteValueDictionary { {"area", "ContactUsWidget"} }, new MvcRouteHandler()) } }; } }
But when I click the send button, it tries to send a message
OrchardLocal / Content / Email / Send
and obviously fails. Can someone point me in the direction of what I am doing wrong?