2012-11-12 82 views
4

我在設置路由到Orchard中的自定義控制器時遇到了一些麻煩。在Orchard中路由自定義控制器CMS

我創建了一個觀點:

@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> 
} 

與控制器:

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(); 
     } 
    } 

和設置路線:

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()) 
       } 
      }; 
     } 
    } 

但是當我點擊提交按鈕,它試圖發佈到

OrchardLocal /內容/電子郵件/發送

,顯然失敗。任何人都可以向我指出我做錯了什麼嗎?

回答

8

試試這個:

@using (Html.BeginForm("Send", "Email", new { area = "Your.Module" }, FormMethod.Post, new { id = "contactUsForm" })) 

增加的面積就是這樣確保只有被搜索匹配的控制器/ action方法對您的模塊的額外條款。

+0

這樣做的竅門,謝謝! – Halceyon